我正在尝试调试 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,我会得到“正在启动调试器代理”。信息。为什么?