Я пытаюсь реализовать сервер API отладки NodeJS поверх моего собственного отладчика. Я хотел бы использовать любой клиент, способный отлаживать Node, для отладки через мой собственный отладчик. Я использую Visual Studio Code в качестве клиента отладки тестов, и мне удалось реализовать достаточный обмен сообщениями, чтобы прикрепить, установить точку останова и уведомить VSC о том, что сценарий был остановлен в точке останова. Проблема в том, что код Visual Studio изменяет значок «Пауза» на «Воспроизведение», чтобы указать, что выполнение приостановлено, но, похоже, он не понимает, на какой точке останова остановился код. Точки останова не выделены. И он не запрашивает фрейм или трассировку стека с сервера. Перед последним обновлением кода VSC в верхней части окна трассировки стека также отображалось сообщение о том, что выполнение приостановлено, после последнего обновления это сообщение не отображается, но выполнение все еще приостановлено.
Вот лог обмена сообщениями между сервером и VSC (начиная с запроса точки останова):
Request:
{
"command": "setbreakpoint",
"arguments": {
"line": 4,
"column": 0,
"type": "scriptRegExp",
"target": "^(.*[\\/\\\\])?\\/Users\\/me\\/Documents\\/github\\/test\\/test\\.js$"
},
"type": "request",
"seq": 8
}
Response:
{
"seq": 9,
"type": "response",
"success": true,
"running": true,
"request_seq": 8,
"command": "setbreakpoint",
"body": {
"type": "scriptRegExp",
"breakpoint": 1,
"script_regexp": "^(.*[\\/\\\\])?\\/Users\\/me\\/Documents\\/github\\/test\\/test\\.js$",
"line": 4,
"column": 0,
"actual_locations": [
{
"line": 4,
"column": 4,
"script_id": 42
}
]
}
}
Response:
{
"type": "event",
"event": "break",
"body": {
"sourceLine": 4,
"sourceColumn": 4,
"sourceLineText": " var product = Product.get(params.pid.stringValue);",
"breakpoints": [
1
],
"script": {
"id": 42,
"name": "/Users/me/Documents/github/test/test.js",
"lineOffset": 0,
"columnOffset": 0,
"lineCount": 458
}
}
}
Request:
{
"command": "threads",
"type": "request",
"seq": 10
}
Response:
{
"seq": 11,
"type": "response",
"success": true,
"running": false,
"request_seq": 10,
"command": "threads",
"body": {
"totalThreads": 1,
"threads": [
{
"current": true,
"id": 4
}
]
}
}
После этого VSC больше не отправляет запросы. Я что-то не так делаю? Может быть, кто-нибудь может указать мне местонахождение некоторых модульных тестов, которые должны проверять отладку VSC Node?
Кроме того, похоже, что запрос потоков не указан в спецификации NodeJS Debugger API, хотя Node отвечает на него. Это новая или просто недокументированная функция?