2

我正在尝试调试 nodejs 脚本(在 Windows 上)。我发现我可以通过使用“调试器”停止执行/在脚本中设置断点;陈述。然而,这似乎只有在 node.exe 调用为:

node debug myscript.js

问题是我不是调用 node.exe 的人,所以我无法传递调试参数。实际上 node.exe 在 myscript.js 之前被多次调用。而 myscript.js 又被一些 other.js 调用。直接运行 myscript.js(在 other.js 之外)不起作用。

有没有办法等待调试器附加?

如果可能,解决方案应该使用一些 GUI 调试器(如 npm node-inspector)。

更新1:

要在应用程序中等待调试器,请使用:

npm install sleep           # install locally, not global

将代码添加到 myscript.js:

var sleep = require('sleep'); 

...
   var done = 1;
   while ( done != 1 ) {
     console.log("PID=" + process.pid);
     sleep(1);
   }
...

运行您的脚本(即启动任何触发其执行的程序):

PID=3280
PID=3280

启动节点检查器:

C:\Users\Samo>node-inspector
Node Inspector v0.12.7
Visit http://127.0.0.1:8080/?port=5858 to start debugging.

打开一个新的 cmd.exe 并运行:

C:\Users\Samo>tasklist /FI "IMAGENAME eq node.exe"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
node.exe                      3944 Console                    1     64,016 K
node.exe                      3280 Console                    1    119,276 K

从同一个 cmd.exe 问题:

node -e "process._debugProcess(3280)"

在调试脚本的输出中,您应该看到:

PID=3280
Starting debugger agent.
Debugger listening on port 5858

现在使用 Chrome(不是 Firefox,而是 Chrome)访问指定的 URL(http://127.0.0.1:8080/?port=5858)。你现在应该可以调试了。

我说应该因为在我的情况下它不起作用。如果我将 _debugProcess 发送到 3280(我的 myscript.js),则不会发生任何事情。但是,如果我将 _debugProcess 发送到 3944,我会得到“正在启动调试器代理”。信息。为什么?

4

1 回答 1

0

如果你有典型的 Windows 工作区,比如NodegitVSCode
你可以通过这些简单的步骤来完成:

  1. 在 VSCode 中,launch.json通过单击滚轮打开配置或新建
    (这是调试视图CtrlShiftD

在此处输入图像描述

  1. 节点默认会监听 9229 端口,所以添加这个配置:
{
  "type": "node",
  "request": "attach",
  "name": "Attach to 9229",
  "port": 9229
},
  1. 打开任务管理器并找到你的节点进程的PID,我可以通过它所在的文件夹
    来识别我的。 "build"index.js在此处输入图像描述
  2. 打开另一个 cmdgit-bash并运行此命令,您的进程的PID在
    哪里。21392
node -e "process._debugProcess(21392)"
  1. 你应该看到这个侦听 ws:9229 的调试器
  2. 从 VSCode Attach 到 9229开始调试
    在此处输入图像描述

现在一切都应该准备好了。

于 2019-09-11T17:25:04.350 回答