Как реализовать строчную отладку кода в C#?

264
04 ноября 2017, 12:02

Добрый день!

У меня имеется код (c#), который я формирую динамически. К примеру, сформировался код следующего вида:

NetOffice.ExcelApi.Application excel = new NetOffice.ExcelApi.Application();
excel.Visible = true;
excel.Workbooks.Open(@"C:\mail.xml");
while (true)
{
     System.Threading.Thread.Sleep(5 * 1000);
     break;
}

Я запускаю этот код при помощи Microsoft.CodeAnalysis.CSharp.Scripting, в отдельном делегате и всё ОК. Но теперь мне необходимо по-шагово отладить данный код. Т.е. фактически, я хочу остановиться в том месте, где мне необходимо и получить все значения локальных/глобальных переменных (классический debug).

Каким образом я могу реализовать такую логику?

Answer 1

Огоооо, ну вы и задачу себе поставили. Писать полноценный отладчик — сложно. Посмотрите сюда на список всех отладочных интерфейсов!

Но для простых случаев — выполнение куска кода и проверка переменных — можно выехать на scripting API. Вот пример (основанный на этом ответе):

var cmd = "int x = 10; int y = 20; string z = (x + y).ToString();";
ScriptState state = await CSharpScript.RunAsync(cmd);
foreach (var v in state.Variables)
    Console.WriteLine($"var {v.Name}, type = {v.Type.Name}, value = {v.Value}");

Он выдаёт:

var x, type = Int32, value = 10
var y, type = Int32, value = 20
var z, type = String, value = 30
READ ALSO
Не форматирует json

Не форматирует json

Подскажите, почему я получаю не ровный столбец в notepad, а вот такое

290
Как настроить слои елементов окна?

Как настроить слои елементов окна?

У меня есть 2 элемента LableКак мне при желании переместить один элемент впереди второго?

238
C# наследуемый метод работает с родительскими полями

C# наследуемый метод работает с родительскими полями

При наследовании, вызывая метод дочернего элемента AAA он продолжает работать с полями родительского класса BBB, а не дочернегоКак это исправить

254
DataGridView checkbox column с привязкой к SQLite

DataGridView checkbox column с привязкой к SQLite

ПриветствуюЕсть DataGridView, в которую загружаются данные из БД SQLite:

270