簡體   English   中英

Node.js:如何附加到正在運行的進程並使用控制台調試服務器?

[英]Node.js: How to attach to a running process and to debug the server with a console?

我使用“永遠”來運行我的應用程序。 我想附加到運行環境來檢查我的應用程序。 那我能做什么?

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

高級用法

可以通過使用 --debug 命令行標志啟動 Node 或使用 SIGUSR1 向現有 Node 進程發送信號來啟用和訪問 V8 調試器。

找到您的node進程的 PID,然后發送SIGUSR1應該可以解決問題:

kill -s SIGUSR1 nodejs-pid

然后運行node-inspector並瀏覽到它指示的 URL。 本教程中的更多內容。

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
  • 如果您可以從瀏覽器訪問服務器,則可以在http://host.domain:9229上使用chrome://inspect
  • 如果您無法通過瀏覽器連接(例如,服務器位於受防火牆保護的生產集群中),您可以激活 REPL 以通過命令行進行檢查:

     node inspect -p <node-pid>
  • 如果您無法從瀏覽器訪問服務器,但可以通過 SSH 連接到該服務器,則設置 SSH 端口轉發( ssh -nNTL 9229:localhost:9229 <username>@<your_host> -i <keyfile>.pem )和幾秒鍾后,您將在chrome://inspect下找到您的腳本。

在此版本之前, node-inspector是用於調試 Node 進程的單獨工具。 但是,正如其自己的頁面所記錄的那樣,它大多已被棄用,因為現在捆綁的調試器正在積極維護並提供更高級的功能。 有關此更改的更多信息,請參閱此線程

對我來說,運行節點版本 6.9.10 我必須:

kill -USR1 <node-pid>

然后

node debug -p <node-pid>

對於此版本的節點, node inspect -p <node-pid>命令失敗。

您可以向您的應用程序添加REPL 例如,如果您添加 REPL 以偵聽 localhost 端口 5001,則您可以像往常一樣啟動您的應用程序並使用 telnet 登錄: telnet localhost 5001 這將帶您進入一個提示,您可以在其中直接與您的應用程序交互。

或者,如果您需要讓您的應用在達到某個狀態時“暫停”,則需要添加“調試器”; 行到您想要這些斷點的代碼區域,然后在調試模式下啟動應用程序。

希望有幫助。

Windows 用戶

如果您使用的 Windows 不支持 POSIX 信號,則可以從另一個cmd使用此解決方法。

node -e "process._debugProcess(PID)"




如需詳細指南或在 VSCode 中設置調試,請按照以下簡單步驟操作:

  1. 在 VSCode 中,打開launch.json配置或通過單擊滾輪創建新配置
    (這是調試視圖Ctrl Shift D

在此處輸入圖片說明

  1. 節點默認會監聽 9229 端口,所以添加這個配置:
 { "type": "node", "request": "attach", "name": "Attach to 9229", "port": 9229 },
  1. 打開任務管理器並找到您的節點進程的PID
    我可以通過index.js所在的"build"文件夾來識別我的。 在此處輸入圖片說明
  2. 打開另一個cmdgit-bash並運行此命令,
    其中21392是您的進程的 PID。
 node -e "process._debugProcess(21392)"
  1. 你應該看到這個調試器監聽 ws:9229
  2. 從 VSCode Attach to 9229開始調試
    在此處輸入圖片說明

現在一切都應該准備好了。

即使這是一個古老但尚未回答的問題,還有一種更簡單的方法,即將參數傳遞給節點:

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

如果您不想等待附加調試器,請將--debug-brk替換為--debug

要檢查 nodejs 並調試它,請使用此命令

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

  • -c如果是自定義命令
  • 如果重新保存文件,請使用-w 重新加載
  • 您可以通過 ip 和端口進行外部檢查
  • 端口自定義為9229

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM