VSCode版本:1.10.2 操作系统版本:Windows 7 Profesionnal,SP1 节点版本:6.10.0
大家好。
我正在尝试用visual studio代码调试服务器端的typescript代码(或javascript代码),当使用nodemon启动它时。我在launch.json中添加了一个新配置,如下所示:
{
"type": "node",
"request": "launch",
"name": "Launch server with Nodemon",
"runtimeExecutable": "nodemon",
"runtimeArgs": [
"--debug=5858"
],
"program": "${workspaceRoot}/src/server.ts",
"restart": true,
"port": 5858,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"outFiles": ["${workspaceRoot}/build/**/*.js"]
}
我在运行tsc的vscode中有一个正确构建javascript文件的任务。这是我当前的任务配置:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "tsc",
"isShellCommand": true,
"args": ["-p", "."],
"showOutput": "silent",
"problemMatcher": "$tsc"
}
当我更改打字稿文件时,会按预期生成javascript文件。 并且当生成javascript文件时,nodejs服务器正在按预期重新启动。
但是我无法打破任何断点(在打字稿文件或javascript文件上)。
如果这是一个问题或者我有什么遗失的话,你能告诉我吗?
感谢您的帮助
答案 0 :(得分:3)
看起来vscode中存在问题(问题由github [here] [1]打开)。但目前,解决方法是将配置中的协议(launch.json)设置为" inspector"。使用此选项,现在可以正确地到达断点。
此外,更改" runtimeArgs"中的" - debug = 5858" 选项" - inspect = 5858"
{
"type": "node",
"request": "launch",
"name": "Launch server with Nodemon",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
"runtimeArgs": [
"--inspect=5858"
],
"program": "${workspaceRoot}/src/server.ts",
"restart": true,
"port": 5858,
"protocol": "inspector",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"outFiles": ["${workspaceRoot}/build/**/*.js"],
"sourceMaps": true
},
此外,如果您有闪烁的消息错误告诉您:
无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONNREFUSED 127.0.0.1:5858)
这意味着您的程序太短,并且调试器没有足够的时间来断开断点。要解决此问题,请向选项" runtimeArgs":" - debug-brk" 添加第二个运行时参数,并设置" stopOnEntry& #34; 选项 true
最终配置应如下所示:
{
"type": "node",
"request": "launch",
"name": "Launch server with Nodemon",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
"runtimeArgs": [
"--inspect=5858",
"--debug-brk"
],
"stopOnEntry": true,
"program": "${workspaceRoot}/src/server.ts",
"restart": true,
"port": 5858,
"protocol": "inspector",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"outFiles": ["${workspaceRoot}/build/**/*.js"],
"sourceMaps": true
}
它应该在您的条目javascript文件的第一行中断。然后你可以按F5,它将到达你自己的断点。
如果您不想在每次运行程序时按F5,则可以将主条目代码嵌入至少1000毫秒超时的setTimeOut函数中。
所有这些选项都会给你足够的时间来破解你的断点。
://github.com/Microsoft/vscode/issues/23900" GitHub Issue"
答案 1 :(得分:1)
@ManfredSteiner
我最近也遇到过这个问题。我想你已经尝试在你的输入文件(main.ts)的开头打破。我听说我们有这个错误消息,因为程序太短并且在调试器可以成功附加之前终止。你有两个解决方案:
首先,将您的输入代码放入至少1000毫秒的setTimeOut函数中。它应该给调试器足够的时间来附加到你的程序。
第二个解决方案是将您的launch.json设置为选项:" stopOnEntry"到"真"并将runtimeArgs选项设置为[" - inspect = 5858"," - debug-brk"]。
像这样:
"configurations": [
{
"type": "node",
"request": "launch",
"name": "nodemon",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
"runtimeArgs": [
"--inspect=5858",
"--debug-brk"
],
"stopOnEntry": true,
"program": "${workspaceRoot}/src/server/main.ts",
"restart": true,
"port": 5858,
"protocol": "inspector",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"outFiles": ["${workspaceRoot}/dist/**/*.js"],
"sourceMaps": true
}
]
它将在main.js的第一行中断,然后按F5,您将能够在main.ts中断开自己的断点。如果你不想要,每次运行你的程序时,按F5直到它到达你的断点,我建议你使用第一个解决方案(将你的main.ts条目代码嵌入setTimeOut函数中至少1000毫秒)。我希望它会对你有所帮助
答案 2 :(得分:0)
@Philoufelin,谢谢你的努力。我现在按照你的建议对它们进行了测试。
...已添加到文件 tsconfig.json
"outDir": "./dist"
来自文件 launch.json
的快照"configurations": [
{
"type": "node",
"request": "launch",
"name": "nodemon",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
"runtimeArgs": [ "--inspect=5858" ],
"program": "${workspaceRoot}/src/server/main.ts",
"restart": true,
"port": 5858,
"protocol": "inspector",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"outFiles": ["${workspaceRoot}/dist/**/*.js"],
"sourceMaps": true
}
]
但它不起作用。 10秒后,vscode闪烁消息......
无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONNREFUSED 127.0.0.1:5858)
nodemon 还会在开始时打印出以下行:
chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:5858/a0f8f52a-47ec-4ddb-9f03-4eb1c97ef8aa
我在chrome中尝试了这个链接,附件工作,但忽略了调试器语句或断点。
我观察到使用vscode进行正常调试的另一个区别。正常调试在DEBUG CONSOLE选项卡中启动。启动nodemon在TERMINAL选项卡中启动。