【问题标题】:VSCode debugging not working for NodeJs applicationVSCode 调试不适用于 NodeJs 应用程序
【发布时间】:2015-06-05 09:13:57
【问题描述】:

我已在 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 并在顶部的调试菜单中选择 Attach 并单击播放按钮。 它附加了,但是当我转到浏览器并打开一个页面时,它不是我的index.js 文件中的断点或处理函数。 你能帮忙看看可能出了什么问题吗?

【问题讨论】:

标签: node.js visual-studio-code


【解决方案1】:

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

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

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

在 VSCode 的下一个版本(0.4.0)中,我们尝试通过以下方式解决这些问题:

  1. VScode 将始终使用 --debug-brk 标志启动节点,但如果用户未指定“stopOnEntry: true”,它将隐藏第一个停止并继续。这将避免在启动代码中丢失断点的问题。

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

【讨论】:

    【解决方案2】:

    您的断点可能设置得太早并且没有被节点注册。如果您在附加后设置断点应该会有所帮助。

    我们在 VSCode 中改进了这种体验,它应该在 0.4.0 中可用

    【讨论】:

    • 这次工作了。非常感谢!!
    • 我有 0.3.0,0.4.0 在某处可用吗?我遇到了类似的调试附加问题。
    • @Isidor 请在我的回答中查看我的详细信息,了解哪些有效,哪些无效。
    【解决方案3】:

    始终清除断点并在附加后设置它们。我学到了很多东西。这肯定是一个错误。

    我一直在研究这个,这是我迄今为止发现的 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. 在代码中附加调试器

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2021-01-22
      相关资源
      最近更新 更多