VSCodedebugging不适用于NodeJs应用程序

我已经在launch.json文件中添加了以下详细信息的configuration:

{ "name": "Attach" "type": "node", // TCP/IP address. Default is "localhost". "address": "localhost", // Port to attach to. "port": 5858 } 

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

当我去VSCode并selectAttach在顶部的debugging菜单,并点击播放button。 它附加,但是当我去浏览器并打开一个页面,它不是它在我的index.js文件中的断点或处理函数。 你能帮我解决一下错误吗?

您的断点可能设置得太早,不会被节点注册。 如果您在连接后设置断点,它应该有所帮助。

我们已经在VSCode中改进了这个经验,它应该在0.4.0中可用

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

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

  2. 节点不会在加载时完全parsing源文件,但会延迟parsing闭包(callback等),直到它们的代码首次被打中。 因此,在callback上设置的断点并不总是正确地由节点注册,因为它还没有parsing代码。 这个“懒惰”的行为可以通过使用–nolazy标志开始节点来禁用。

在VSCode(0.4.0)的下一个版本中,我们试图解决这个问题如下:

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

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

总是清除你的断点,并在你附加后设置它们。 我学会了艰辛的道路。 这当然是一个错误。

我一直在深入研究,到目前为止我已经发现了0.3.0。

这不行!

  1. 在代码中添加一个断点到app.js或路线
  2. 在terminal运行node --debug src/server/app.js
  3. 在代码中附加debugging器

这工作!

  1. 在terminal运行node --debug src/server/app.js
  2. 在代码中删除所有的断点
  3. 在代码中添加一个断点到app.js或路线
  4. 在代码中附加debugging器

这是行不通的,因为–debug除非在节点之后和文件之前的参数不起作用

  1. 在terminal运行node src/server/app.js --debug
  2. 在代码中删除所有的断点
  3. 在代码中添加一个断点到app.js或路线
  4. 在代码中附加debugging器

这个工作,假设你有一个吞咽的过程

  1. 在terminal运行gulp serve-dev --debug
  2. 在代码中删除所有的断点
  3. 在代码中添加一个断点到app.js或路线
  4. 在代码中附加debugging器

有时这不起作用

  1. 在terminal运行gulp serve-dev --debug
  2. 在代码中添加一个断点到app.js或路线
  3. 在代码中附加debugging器

为什么有时? 我能说的最好的是,断点有时变得时髦。 有时候它们工作的很好,有时我必须删除它们,并在连接debugging器之前重新添加它们。