如何 debug nodeJS 代码? how to inspect NodeJS code?

Posted givingwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何 debug nodeJS 代码? how to inspect NodeJS code?相关的知识,希望对你有一定的参考价值。

基本原理

  1. 启动 WebSocket 进行基于 inspect protocol 双工通信
    1. current_node_process <=> current_websocket <=> current_inspect_tool
  2. 启动 HTTP 服务,记录源(Meta)信息
  3. 每个程序会生成一个 UUID

IDE

VS Code

VS code 中打断点,然后进入 debugger 面板,点击开始。

技术图片

Config launch.json

mkdir node-debug-demo
cd node-debug-demo
touch cmd.js
echo "console.log(process.argv.slice(2))" >> cmd.js
node cmd.js -t test -a abort

Will show folling results:

[ '-t',
  'test',
  '-a',
  'abort' ]

But may they never been show for VS code debug mode, so we need canfig the .vscode/launch.json:
技术图片

Then we could see this:
技术图片

We could write manaul or auto generate new:
技术图片

Code:

{
  "type": "node",
  "request": "launch",
  "name": "Test cmd.js",
  "program": "${workspaceFolder}/cmd.js",
  "args": [
    "-t",
    "test",
    "-a",
    "abort"
  ]
}

Use VS code debug panel to debug the cmd.js before this we must chekcout to it:
技术图片

Chrome DEVTOOLS

chrome://inspect

1st: Run CMD in terminal and the CLI options are right here:
技术图片

node debug -help # it is very useful as well
# or 
node inspect dmeo.js

> help

2nd: Navigates to chrome://inspect page
技术图片

inspect protocol

1st: Run CMD in terminal and the CLI options are right here:
技术图片

复制 HOST + PORT 端口号进入浏览器:
技术图片

HOST + PORT + "/json" 查看 HTTP
技术图片

复制返回的 JSON 字符串中的 devtoolsFrontendUrl 字段,打上 breakpoint, 开始调试:
技术图片

DEVTOOLS Node ICON

only works for OSX and Linux.
点击绿色的 nodeJS ICON.

技术图片

性能调优

open DEVTOOLS - JSProfiler recording, then refresh current page to record how long used of each function execute.

技术图片

END

Have fun with NodeJS.

以上是关于如何 debug nodeJS 代码? how to inspect NodeJS code?的主要内容,如果未能解决你的问题,请参考以下文章

How to debug a GLSL shader?

How to debug a GLSL shader?

How Do We Debug in Embedded System

How to DEBUG a trigger or procedure

How to debug PostgreSQL function with pgAdminIII

markdown How-To-Install-NodeJS.md