我正在尝试使用VSCode来调试我正在运行的节点应用程序。
我在一个单独的终端中启动应用程序,然后使用attach来处理配置以挂钩它。
附件工作正常,我得到一个侧面板,上面写着“加载的脚本”。与我的项目中的文件。如果我点击其中一个并在那里设置断点,它将正常工作。
如果我在通过VSCode编辑器打开的文件上设置断点,断点会变灰,当我将鼠标悬停在它上面时会说“断点设置但尚未绑定”。
如何才能使我在代码上设置的断点绑定?
答案 0 :(得分:6)
在启动文件中尝试此配置:
{
"name": "Attach to Process",
"type": "node",
"protocol": "inspector",
"request": "attach",
"stopOnEntry": false,
"port": 5858,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/somepath/myprojectroot",
"sourceMaps": true
}
确保remoteRoot
是正确的路径,否则它将不知道在哪里查找源文件。
答案 1 :(得分:4)
在VSCode设置上搜索“调试javascript使用预览”,然后将其禁用。现在它应该绑定所有断点。
答案 2 :(得分:4)
我在使用 VSCode 1.52.1
时遇到了这个问题,对我有用的修复方法是:
通过代码 > 首选项 > 设置禁用 debug.javascript.usePreview
将 "localRoot": "${workspaceFolder}/"
添加到 launch.json
将 "remoteRoot": "${workspaceFolder}/"
添加到 launch.json
答案 3 :(得分:3)
显而易见的事实是VSCode 1.20不允许你点击断点。
我也尝试了1.21,它也不允许你这样做。
我回到了1.18,它的效果与预期的一样,没问题。
答案 4 :(得分:2)
我遇到了同样的问题...
在尝试了很多启动配置组合后,我发现了正确的位置。
{
"type": "node",
"request": "attach",
"name": "Attach Program",
"protocol": "inspector",
"restart": true,
"skipFiles": [
"<node_internals>/**"
],
"localRoot": "${workspaceFolder}",
"remoteRoot": "/",
}
Ps:我使用--inspect参数(允许调试器附加节点)使用nodemon启动节点脚本。
答案 5 :(得分:1)
对我来说,只需将"localRoot": "${workspaceFolder}"
添加到默认launch.json
配置中就可以了。
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/bin/www",
"localRoot": "${workspaceFolder}"
}
答案 6 :(得分:1)
我参加聚会很晚,但想分享导致我的“未绑定断点”错误的原因。
我有文件A和B。文件A被调用到文件B中(并在文件A的顶部require
d)。文件A的断点运行正常。文件B有时会让我打他们,但如果它能正常工作,我将无法获得完整的调试经验。
我终于意识到文件A顶部的require
语句的大小写与实际文件夹结构不同。 require
正在/path/to/file
,应该在/Path/To/File
的地方。
我修复了路径框和文件B中的断点,再次开始工作。
答案 7 :(得分:0)
我有一个TypeScript项目,该项目突然不再遇到断点了。就我而言,我必须将项目文件夹移出iCloud Drive文件夹。还有其他指示符指出这条路不通,例如缺少git gutter指示符。这是我的调试启动配置。命中app.ts
中的断点。
{
"type": "node",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/src/app.ts",
"sourceMaps": true,
"protocol": "inspector",
"cwd": "${workspaceFolder}",
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
]
}
答案 8 :(得分:0)
要达到断点,您需要在调试模式下进行编译。
因此,在使用tasks.json
编译代码时,请在command
属性中启用调试标志。 C ++示例:
{
"version": "2.0.0",
"tasks": [
{
"label": "Compile Test",
"type": "shell",
"command": "g++ -g test.cpp",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": true
},
"group": "build",
}
]
}
我正在谈论-g
中的"command": "g++ -g test.cpp",
标志
答案 9 :(得分:0)
嗨,我遇到了同样的问题,我通过添加到
来解决了这个问题。actMsg
我的包含代码的文件夹
"webRoot": "${workspaceFolder}",
完整的launch.json
"webRoot": "${workspaceFolder}/src",
答案 10 :(得分:0)
我正在使用此配置来调试TypeScript项目:
{
"name": "Debug API",
"request": "attach",
"skipFiles": [
"<node_internals>/**"
],
"type": "pwa-node",
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/**/*.js",
"!**/node_modules/**"
]
},
outFiles
完成了技巧并限制了我的断点(VS代码1.51.1)。
答案 11 :(得分:0)
您应该检查的第一件事是入口点 - 执行的第一行代码。如果该断点可以绑定断点,那么您就知道其他断点未绑定,因为在遇到其他断点之间的某些时间被引入的错误抢占了。在这种情况下,您的代码无法访问,IDE 可以检测到您的模块根本没有加载。
答案 12 :(得分:0)
我正在使用 VSCode 调试器运行 Docker Compose,在我的情况下,即使在尝试了上述解决方案之后,我设置的一些断点显示为无界,有些则显示为有界。
似乎无界的在函数之外(例如在 require 或变量初始化语句上)。
我只能假设这是因为调试器附加在 docker 容器启动后运行(因此这些断点无法访问)。
答案 13 :(得分:0)
@alkasai 有正确答案。
但是,将哪个源代码文件夹添加到您的工作区也很重要。我的存储库结构是这样的:C:\git\parent_folder\child_folder\src
我的断点不起作用,只要“parent_folder”是添加到我的工作区的文件夹并且我的“webRoot”条目如下所示:
"webRoot": "${workspaceRoot}",
但是,如果我将 '/child_folder' 添加到 'webRoot'(例如“webRoot”:“${workspaceRoot}/child_folder”),断点就起作用了。
但是,如果我从 VS Code 工作区中删除了“parent_folder”,而是将“child_folder”添加到了工作区(从而更改了“${workspaceRoot}”变量值的基础值),则原始条目(没有'/child_folder' 子文件夹引用)导致断点被激活。