VSCode 调试不适用于 NodeJs 应用程序
VSCode debugging not working for NodeJs application
我已在 launch.json 文件中添加配置,其中包含以下详细信息:
{
"name": "Attach"
"type": "node",
// TCP/IP address. Default is "localhost".
"address": "localhost",
// Port to attach to.
"port": 5858
}
现在我使用以下命令启动我的应用程序:node --debug-brk ./bin/www
当我转到顶部调试菜单中的 VSCode 和 select Attach
并单击播放按钮时。
它附加了,但是当我转到浏览器并打开一个页面时,它不是我的 index.js
文件中的断点或处理函数。
你能帮忙看看哪里出了问题吗?
你的断点可能设置得太早,没有被节点注册。如果您在附加后设置断点,应该会有所帮助。
我们在 VSCode 中改进了此体验,应该会在 0.4.0
中提供
始终清除断点并在附加后设置它们。我学到了很多东西。这肯定是一个错误。
我一直在深入研究这个问题,这是我目前为 0.3.0 找到的内容。
这不行!
- 在代码中添加断点到 app.js 或路由
- 在航站楼 运行
node --debug src/server/app.js
- 在代码中附加调试器
有效!
- 在航站楼 运行
node --debug src/server/app.js
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
这不起作用,因为 --debug 不会启动,除非它是节点之后和文件之前的 arg
- 在航站楼 运行
node src/server/app.js --debug
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
假设您有一个 gulp 进程
,这是可行的
- 在航站楼 运行
gulp serve-dev --debug
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
这个不行,有时候
- 在航站楼 运行
gulp serve-dev --debug
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
为什么有时候?我能说的最好的是断点有时会变得很奇怪。有时它们工作正常,有时我必须删除它们并在附加调试器之前重新添加它们。
节点中的断点有两个问题(这些问题不是 VSCode 特有的,但您也可以在节点检查器中看到它们):
如果您在应用程序的启动代码中设置断点并使用 --debug 启动节点(与 --debug-brk 相反),节点会立即启动并在 [=39= 之前执行您的启动代码] 有机会注册断点。因此,如果您需要调试启动代码,请使用 --debug-brk 标志,因为它允许 VSCode 在节点启动应用程序之前设置断点。
Node 不会在加载时完全解析源文件,而是延迟解析闭包(回调等),直到它们的代码被第一次命中。因此,在回调上设置的断点并不总是被节点正确注册,因为它还没有解析代码。这种 'lazy' 行为可以通过使用 --nolazy 标志启动节点来禁用。
在下一版本 VSCode (0.4.0) 中,我们尝试解决这些问题,如下所示:
VScode 将始终使用 --debug-brk 标志启动节点,但如果用户未指定 "stopOnEntry: true",则会隐藏第一站并继续。这将避免启动代码中遗漏断点的问题。
如果在node没有解析的代码中设置断点,node会在解析后的代码中下一个可能的位置注册断点。由于这些 "actual" 位置由节点返回给客户端,因此 VSCode 能够显示这些位置。因此,用户将看到在未解析的回调 "jumps" 中设置的断点位于更下方的位置,并且他将更好地理解为什么调试器没有在请求的位置停止。此外,我们在断点视图中添加了一个 "Reapply" 按钮,这使得清除和设置所有断点变得非常容易。
我已在 launch.json 文件中添加配置,其中包含以下详细信息:
{
"name": "Attach"
"type": "node",
// TCP/IP address. Default is "localhost".
"address": "localhost",
// Port to attach to.
"port": 5858
}
现在我使用以下命令启动我的应用程序:node --debug-brk ./bin/www
当我转到顶部调试菜单中的 VSCode 和 select Attach
并单击播放按钮时。
它附加了,但是当我转到浏览器并打开一个页面时,它不是我的 index.js
文件中的断点或处理函数。
你能帮忙看看哪里出了问题吗?
你的断点可能设置得太早,没有被节点注册。如果您在附加后设置断点,应该会有所帮助。
我们在 VSCode 中改进了此体验,应该会在 0.4.0
中提供始终清除断点并在附加后设置它们。我学到了很多东西。这肯定是一个错误。
我一直在深入研究这个问题,这是我目前为 0.3.0 找到的内容。
这不行!
- 在代码中添加断点到 app.js 或路由
- 在航站楼 运行
node --debug src/server/app.js
- 在代码中附加调试器
有效!
- 在航站楼 运行
node --debug src/server/app.js
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
这不起作用,因为 --debug 不会启动,除非它是节点之后和文件之前的 arg
- 在航站楼 运行
node src/server/app.js --debug
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
假设您有一个 gulp 进程
,这是可行的- 在航站楼 运行
gulp serve-dev --debug
- 在代码中删除所有断点
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
这个不行,有时候
- 在航站楼 运行
gulp serve-dev --debug
- 在代码中添加断点到 app.js 或路由
- 在代码中附加调试器
为什么有时候?我能说的最好的是断点有时会变得很奇怪。有时它们工作正常,有时我必须删除它们并在附加调试器之前重新添加它们。
节点中的断点有两个问题(这些问题不是 VSCode 特有的,但您也可以在节点检查器中看到它们):
如果您在应用程序的启动代码中设置断点并使用 --debug 启动节点(与 --debug-brk 相反),节点会立即启动并在 [=39= 之前执行您的启动代码] 有机会注册断点。因此,如果您需要调试启动代码,请使用 --debug-brk 标志,因为它允许 VSCode 在节点启动应用程序之前设置断点。
Node 不会在加载时完全解析源文件,而是延迟解析闭包(回调等),直到它们的代码被第一次命中。因此,在回调上设置的断点并不总是被节点正确注册,因为它还没有解析代码。这种 'lazy' 行为可以通过使用 --nolazy 标志启动节点来禁用。
在下一版本 VSCode (0.4.0) 中,我们尝试解决这些问题,如下所示:
VScode 将始终使用 --debug-brk 标志启动节点,但如果用户未指定 "stopOnEntry: true",则会隐藏第一站并继续。这将避免启动代码中遗漏断点的问题。
如果在node没有解析的代码中设置断点,node会在解析后的代码中下一个可能的位置注册断点。由于这些 "actual" 位置由节点返回给客户端,因此 VSCode 能够显示这些位置。因此,用户将看到在未解析的回调 "jumps" 中设置的断点位于更下方的位置,并且他将更好地理解为什么调试器没有在请求的位置停止。此外,我们在断点视图中添加了一个 "Reapply" 按钮,这使得清除和设置所有断点变得非常容易。