Javascript 当I';我不是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调试

我正在尝试调试nodejs脚本(在Windows上)。我发现我可以使用“调试器;”停止执行/设置脚本断点陈述但是,只有当node.exe调用为:

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工作区,如节点gitVSCode
您可以通过以下简单步骤完成此操作:

  • 在VSCode中,打开
    launch.json
    configuration或单击控制盘创建新的
    (这是调试视图CtrlShiftD)
  • 节点将侦听端口9229,因此添加此配置:
  • 打开任务管理器并找到节点进程的PID
    我可以通过
    索引.js
    所在的
    “build”
    文件夹来识别我的身份。
  • 打开另一个
    cmd
    gitbash
    并运行此命令,
    其中
    21392
    是流程的PID
  • 你应该看看这个
  • 从VSCode附加到9229开始调试

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

    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)"