53

我使用“永远”来运行我的应用程序。我想附加到运行环境来检查我的应用程序。那么我能做什么呢?

4

7 回答 7

59

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

高级用法

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

找到您的进程的 PID,node然后发送SIGUSR1应该可以解决问题:

kill -s SIGUSR1 nodejs-pid

然后运行node-inspector并浏览到它指示的 URL。本教程中的更多内容。

于 2012-10-24T16:34:01.707 回答
36

Node 6.3开始,node 有一个内置的调试器,可以通过执行以下操作来触发(即使在生产应用程序中):

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
  • 如果您可以从浏览器访问服务器,则可以使用chrome://inspecton http://host.domain:9229
  • 如果您无法通过浏览器连接(例如,服务器位于防火墙生产集群中),您可以激活 REPL 以通过命令行进行检查:

    node inspect -p <node-pid>
    
  • 如果您无法从浏览器访问服务器,但您可以通过 SSH 连接到该服务器,然后设置 SSH 端口转发 ( ),几秒钟后ssh -nNTL 9229:localhost:9229 <username>@<your_host> -i <keyfile>.pem您将在下面找到您的脚本。chrome://inspect

在此版本之前,它node-inspector是用于调试 Node 进程的单独工具。但是,正如它自己的页面上所记录的那样,它大多已被弃用,因为现在捆绑的调试器得到了积极维护并提供了更高级的功能。有关此更改的更多信息,请参阅此线程

于 2018-01-11T18:55:40.530 回答
8

Windows 用户

/编辑 2022

这是我目前使用的,在settings.json中配置。这将提示您选择一个进程,它会自动向它发送调试信号。阅读下面的更多内容以了解正在发生的事情。

在此处输入图像描述

  "launch": {
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Attach to Process (Pick)",
        "type": "node",
        "request": "attach",
        "processId": "${command:PickProcess}",
        "port": 9229,
      }
    ]
  },



之前

如果您在不支持 POSIX 信号的 Windows 上,您可以从另一个 cmd.

node -e "process._debugProcess(PID)"



如需详细指南,或在 VSCode 中设置调试,请按照以下简单步骤操作:

  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-12T08:12:51.563 回答
7

对我来说,运行节点版本 6.9.10 我必须:

kill -USR1 <node-pid>

然后

node debug -p <node-pid>

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

于 2018-03-04T09:45:42.563 回答
5

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

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

希望有帮助。

于 2012-10-25T14:22:00.330 回答
0

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

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

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

于 2014-10-14T16:58:16.647 回答
0

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

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

  • -c如果用于自定义命令
  • 如果文件被重新保存,使用-w 重新加载
  • 您可以通过 ip 和端口进行外部检查
  • 端口自定义为9229
于 2018-03-01T19:38:51.480 回答