Node.js:如何附加到正在运行的进程并使用控制台调试服务器?

时间:2012-10-24 15:34:40

标签: node.js console

我使用'forever'来运行我的应用程序。我想附加到运行环境来检查我的应用程序。那我该怎么办?

7 个答案:

答案 0 :(得分:42)

来自http://nodejs.org/api/debugger.html

  

高级用法

     

可以通过使用--debug命令行标志启动Node或通过发送信号来启用和访问V8调试器   使用SIGUSR1的现有Node流程。

找到node进程的PID,然后发送SIGUSR1应该做的诀窍:

kill -s SIGUSR1 nodejs-pid

然后运行node-inspector并浏览到它指示的URL。更多信息this tutorial

答案 1 :(得分:7)

节点6.3 开始,节点有一个可以触发的内置调试器(即使在生产应用程序中):

kill -USR1 <node-pid>

节点进程会吐出这样的东西:

Debugger listening on ws://127.0.0.1:9229/f3f6f226-7dbc-4009-95fa-d516ba132fbd
For help see https://nodejs.org/en/docs/inspector
  • 如果您可以通过浏览器访问服务器,则可以http://host.domain:9229使用chrome://inspect
  • 如果无法通过浏览器连接(即服务器位于防火墙生产群集中),则可以激活REPL以检查命令行:

    node inspect -p <node-pid>
    

在此版本之前,node-inspector是用于调试节点进程的单独工具。但是,正如在其自己的页面上所记录的那样,它主要被弃用,因为现在捆绑的调试器被主动维护并提供更高级的功能。有关此更改的详细信息,请参阅this thread

答案 2 :(得分:5)

您可以在应用中添加REPL。例如,如果您添加REPL以侦听localhost端口5001,则可以照常启动应用程序并使用telnet登录:telnet localhost 5001。这将带您到一个提示,您可以直接与您的应用程序进行交互。

或者,如果您的应用需要在达到某个状态时“暂停”,则需要添加“调试器”;将代码区域划分到您想要这些断点的代码区域,然后以debug模式启动应用程序。

希望有所帮助。

答案 3 :(得分:2)

Windows用户

如果您使用的Windows不支持POSIX信号,则可以从另一个 cmd使用此替代方法。

node -e "process._debugProcess(PID)"




有关详细指南,或要在VSCode中设置调试,请遵循以下简单步骤:

  1. 在VSCode中,打开launch.json配置或通过单击方向盘来创建新配置
    (这是调试视图 Ctrl Shift D

enter image description here

  1. 该节点将在端口9229 by default上进行侦听,因此请添加以下配置:
{
  "type": "node",
  "request": "attach",
  "name": "Attach to 9229",
  "port": 9229
},
  1. 打开任务管理器并找到您的节点进程的PID
    我可以通过"build"所在的index.js文件夹来识别我的身份。 enter image description here
  2. 打开另一个 cmdgit-bash并运行此命令,
    其中21392是您的进程的PID。
node -e "process._debugProcess(21392)"
  1. 您应该看到此Debugger listening on ws:9229
  2. 从VSCode 附加到9229
    开始调试 enter image description here

现在一切都准备就绪。

答案 4 :(得分:1)

对我来说,运行节点版本6.9.10我不得不:

kill -USR1 <node-pid>

然后

node debug -p <node-pid>

此版本的节点node inspect -p <node-pid>命令失败。

答案 5 :(得分:0)

即使这是一个陈旧但已回答的问题,有一种更简单的方法,即将参数传递给节点:

forever start -c 'node --debug-brk' main.js

如果您不想等待附加调试器,请将--debug-brk替换为--debug

答案 6 :(得分:0)

要检查nodejs并对其进行调试,请使用此命令

forever -w -c 'node --inspect=IP:PORT' file.js

  • -c ,如果是自定义命令
  • 如果文件重新保存,则使用 -w重新加载
  • 您可以通过IP和端口进行外部检查
  • 端口自定义 9229