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 找到的内容。

这不行!

  1. 在代码中添加断点到 app.js 或路由
  2. 在航站楼 运行 node --debug src/server/app.js
  3. 在代码中附加调试器

有效!

  1. 在航站楼 运行 node --debug src/server/app.js
  2. 在代码中删除所有断点
  3. 在代码中添加断点到 app.js 或路由
  4. 在代码中附加调试器

这不起作用,因为 --debug 不会启动,除非它是节点之后和文件之前的 arg

  1. 在航站楼 运行 node src/server/app.js --debug
  2. 在代码中删除所有断点
  3. 在代码中添加断点到 app.js 或路由
  4. 在代码中附加调试器

假设您有一个 gulp 进程

,这是可行的
  1. 在航站楼 运行 gulp serve-dev --debug
  2. 在代码中删除所有断点
  3. 在代码中添加断点到 app.js 或路由
  4. 在代码中附加调试器

这个不行,有时候

  1. 在航站楼 运行 gulp serve-dev --debug
  2. 在代码中添加断点到 app.js 或路由
  3. 在代码中附加调试器

为什么有时候?我能说的最好的是断点有时会变得很奇怪。有时它们工作正常,有时我必须删除它们并在附加调试器之前重新添加它们。

节点中的断点有两个问题(这些问题不是 VSCode 特有的,但您也可以在节点检查器中看到它们):

  1. 如果您在应用程序的启动代码中设置断点并使用 --debug 启动节点(与 --debug-brk 相反),节点会立即启动并在 [=39= 之前执行您的启动代码] 有机会注册断点。因此,如果您需要调试启动代码,请使用 --debug-brk 标志,因为它允许 VSCode 在节点启动应用程序之前设置断点。

  2. Node 不会在加载时完全解析源文件,而是延迟解析闭包(回调等),直到它们的代码被第一次命中。因此,在回调上设置的断点并不总是被节点正确注册,因为它还没有解析代码。这种 'lazy' 行为可以通过使用 --nolazy 标志启动节点来禁用。

在下一版本 VSCode (0.4.0) 中,我们尝试解决这些问题,如下所示:

  1. VScode 将始终使用 --debug-brk 标志启动节点,但如果用户未指定 "stopOnEntry: true",则会隐藏第一站并继续。这将避免启动代码中遗漏断点的问题。

  2. 如果在node没有解析的代码中设置断点,node会在解析后的代码中下一个可能的位置注册断点。由于这些 "actual" 位置由节点返回给客户端,因此 VSCode 能够显示这些位置。因此,用户将看到在未解析的回调 "jumps" 中设置的断点位于更下方的位置,并且他将更好地理解为什么调试器没有在请求的位置停止。此外,我们在断点视图中添加了一个 "Reapply" 按钮,这使得清除和设置所有断点变得非常容易。