VSCode调试不适用于NodeJs应用程序

sum*_*wal 5 node.js visual-studio-code

我在launch.json文件中添加了配置,其中包含以下详细信息:

{
    "name": "Attach"
    "type": "node",
    // TCP/IP address. Default is "localhost".
    "address": "localhost",
    // Port to attach to.
    "port": 5858
}
Run Code Online (Sandbox Code Playgroud)

现在我使用以下命令启动我的应用程序: node --debug-brk ./bin/www

当我进入VSCode并Attach在顶部的调试菜单中选择并单击播放按钮.它附加,但当我去浏览器并打开一个页面时,它不是我index.js文件中的断点或处理函数.你能帮忙解决可能出现的问题吗?

And*_*and 6

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


Isi*_*lic 4

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

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