Javascript 当I';我不是node.exe的调用方
我正在尝试调试nodejs脚本(在Windows上)。我发现我可以使用“调试器;”停止执行/设置脚本断点陈述但是,只有当node.exe调用为:Javascript 当I';我不是node.exe的调用方,javascript,node.js,debugging,attach-to-process,Javascript,Node.js,Debugging,Attach To Process,我正在尝试调试nodejs脚本(在Windows上)。我发现我可以使用“调试器;”停止执行/设置脚本断点陈述但是,只有当node.exe调用为: node debug myscript.js 问题是我不是调用node.exe的人,所以我无法传递调试参数。实际上,node.exe在myscript.js之前被多次调用。而myscript.js又被其他一些.js调用。直接运行myscript.js(在other.js之外)不起作用 是否有方法等待调试器附加 如果可能,解决方案应该使用一些GUI调试
node debug myscript.js
问题是我不是调用node.exe的人,所以我无法传递调试参数。实际上,node.exe在myscript.js之前被多次调用。而myscript.js又被其他一些.js调用。直接运行myscript.js(在other.js之外)不起作用
是否有方法等待调试器附加
如果可能,解决方案应该使用一些GUI调试器(如npm节点检查器)
更新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);
}
...
运行脚本(即启动触发其执行的任何程序):
启动节点检查器:
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()。您现在应该可以调试了
我说应该,因为在我的情况下它不起作用。如果我将_debugProcess发送到3280(myscript.js),什么都不会发生。但是,如果我将_debugProcess发送到3944,就会收到“Starting debugger agent.”消息为什么?如果您有典型的windows工作区,如节点、git和VSCode,
您可以通过以下简单步骤完成此操作:
launch.json
configuration或单击控制盘创建新的(这是调试视图CtrlShiftD)
我可以通过
索引.js
所在的“build”
文件夹来识别我的身份。
cmd
或gitbash
并运行此命令,其中
21392
是流程的PID现在一切都应该准备好了 Windows上无法发送SIGUSR1的可能副本。REPL是可以通过的(如果可以的话),但我更愿意附加一个GUI调试器。GUI调试器只是以与普通调试器相同的方式附加,但提供了一个很好的布局。所以理论上你可以使用任何调试器工具。所以如果我理解正确。。。我应该从myscript.js中调用process.\u debugProcess(pid)?其中pid是运行myscript.js的node.exe的pid?为什么它需要知道自己的pid?你需要调用
process.\u debugProcess(pid)
,而不是从你正在调试的脚本。它需要知道PID,以便能够连接到正确的流程。PS:我第一次使用的是PS
,因此使用了git,但我中途更改了它,没有意识到。:)事实证明,在Windows上甚至不需要Unix UTIL。
PID=3280
Starting debugger agent.
Debugger listening on port 5858
{
"type": "node",
"request": "attach",
"name": "Attach to 9229",
"port": 9229
},
node -e "process._debugProcess(21392)"