Как делается отладчик собственного скриптового редактора
От: Sаныч Таиланд  
Дата: 05.11.23 06:57
Оценка: 9 (1)
Есть простейшие редактор кода. Код компилируется через roslyn компилятор динамически, беря строчку из редактора и делая компиляцию через класс CSharpCompilation (работает с полученными типами идет через рефлексию).

Встал вопрос — а как сделать отладчик такого кода? Визуально контрол поддерживает установку брейкпоинтов. Но что нужно сделать under the hood? Как заставить динамический останавливаться в заданном месте?
Re: Как делается отладчик собственного скриптового редактора
От: RushDevion Россия  
Дата: 05.11.23 18:28
Оценка: 13 (3)
В .net есть debugging API.
Но по msdn докам с ним тяжело разобраться.
Вот посмотри серию статей: https://lowleveldesign.wordpress.com/2010/10/11/writing-a-net-debugger-part-1-starting-the-debugging-session
Re[2]: Как делается отладчик собственного скриптового редакт
От: bnk СССР http://unmanagedvisio.com/
Дата: 05.11.23 22:04
Оценка: 9 (2)
Здравствуйте, RushDevion, Вы писали:

RD>В .net есть debugging API.

RD>Но по msdn докам с ним тяжело разобраться.
RD>Вот посмотри серию статей: https://lowleveldesign.wordpress.com/2010/10/11/writing-a-net-debugger-part-1-starting-the-debugging-session

Интересно, но 2010 год, и какой-то жуткий COM Interop на винде
Подумал тут что в VS Code отладка под линуксом/маком работает, может быть что-то полезное.
https://github.com/dotnet/vscode-csharp

Поспрашивал чат гопоты он на удивление довольно много знает.
Говорит что vscode использует vsdbg, это такой специальный готовый отладчик
Оно взаимодействует с ним через протокол DAP https://microsoft.github.io/debug-adapter-protocol
Взаимодействие путем посылки и приема JSON через консольный пайп.

  Говорит вот так можно запустить и установить точку останова
// Initialize Debug Session
{
  "command": "initialize",
  "arguments": {
    "clientID": "your-editor",
    "clientName": "Your Editor",
    "adapterID": "coreclr",
    "pathFormat": "path",
    "linesStartAt1": true,
    "columnsStartAt1": true,
    "supportsVariableType": true,
    "supportsVariablePaging": false,
    "supportsRunInTerminalRequest": true,
    "locale": "en-us"
  },
  "type": "request",
  "seq": 1
}

// Attach or Launch the Script
{
  "command": "launch",
  "arguments": {
    "program": "path/to/script.dll",
    "stopAtEntry": false,
    "cwd": "path/to/script",
    "console": "internalConsole",
    // Other necessary arguments
  },
  "type": "request",
  "seq": 2
}

// Set Breakpoints
{
  "command": "setBreakpoints",
  "arguments": {
    "source": {
      "path": "path/to/script.cs"
    },
    "breakpoints": [
      {
        "line": 10
      }
      // More breakpoints
    ],
    "sourceModified": false
  },
  "type": "request",
  "seq": 3
}
Отредактировано 05.11.2023 22:38 bnk . Предыдущая версия . Еще …
Отредактировано 05.11.2023 22:33 bnk . Предыдущая версия .
Re[3]: Как делается отладчик собственного скриптового редакт
От: Sаныч Таиланд  
Дата: 06.11.23 05:59
Оценка:
Спасибо всем ответившися. Выглядят решения ужасными. Откажусь от идеи делать поддержку таких вещей, пока не сделают это на уровне .NET CORE
Re: Как делается отладчик собственного скриптового редактора
От: grigorash Россия www.geoserver.ru
Дата: 07.11.23 11:57
Оценка:
Здравствуйте, Sаныч, Вы писали:

S>Есть простейшие редактор кода. Код компилируется через roslyn компилятор динамически, беря строчку из редактора и делая компиляцию через класс CSharpCompilation (работает с полученными типами идет через рефлексию).


S>Встал вопрос — а как сделать отладчик такого кода? Визуально контрол поддерживает установку брейкпоинтов. Но что нужно сделать under the hood? Как заставить динамический останавливаться в заданном месте?

Посмотри вот эту статью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.