Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

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

#c_sharp #net #отладка #компиляция


Добрый день!

У меня имеется код (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).

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

UPDATE:

В итоге сделал способом, который обсуждался ниже, через Scripting API. Чтобы отслеживать
текущий блок(этап) кода, перед каждым шагом я вставляю ко, который меняет специальный
параметр текущего домена (в него передается UID шага). Этот параметр считывается из
главного домена (из которого запускается выполнение кода). 
    


Ответы

Ответ 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

Комментариев нет:

Отправить комментарий