如何调试node.js
以前就会一种,是打开【RUN AND DEBUG】,选择【运行node.js】,但是遇到这种情况就是一脸懵了
使用Chorme devtool 调试
node --inspect-brk ./index.js
--inspect 是以调试模式启动,--inspect-brk 是以调试模式启动并且在首行断住。然后你可以看到
然后就会看到一个ws地址。打开 chrome://inspect/#devices
点击 inspect 就可以调试这个脚本了, 在 Chrome DevTools 里调试,在 VSCode 里写代码,切来切去也比较麻烦,一般做法是用 VsCode Debugger
使用 VsCode Debugger
不启动 node --inspect-brak xx, 直接在 launch.json 配置
// launch.json
"configurations": [
{
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node-test/index.js",
"name": "Launch",
"stopOnEntry": true, // 首行进入断点
"skipFiles": ["<node_internals>/**"]
}
]
launch.json 参数详解
{
"version": "0.2.0",
"configurations": [
{
"type": "node", // 指定调试器类型,这里是Node.js
"request": "launch", // 启动配置类型,可以是"launch"(启动)或"attach"(附加到已运行的进程)
"name": "Launch Program", // 配置名称,在调试配置列表中显示
...
}
]
}
launch 和 attach 都支持的参数
-
outFiles用于查找生成的 JavaScript 文件的 global pattern 组。请参阅Source maps部分。 -
resolveSourceMapLocations- 用于解析源映射位置的 global pattern 组。请参阅Source maps 部分。 -
timeout重新启动会话时,在此毫秒数后放弃。请参阅附加到 Node.js 部分。 -
stopOnEntry程序启动时立即断点。 -
localRootVS Code 的根目录。请参阅下面的 Remote debugging部分。 -
remoteRoot节点的根目录. 请参阅下面的 远程调试 部分. -
smartStep尝试自动跳过没有映射到源文件的代码. 看 Smart stepping部分. -
skipFiles自动跳过这些 glob patterns 所覆盖的文件. 请参考 Skipping uninteresting code 部分. -
trace启用诊断输出.
用于launch的参数
-
program要调试的Node.js程序的绝对路径。 -
args传递给程序进行调试的参数。此属性的类型为 array,需要将单个参数作为数组元素。 -
cwd启动要在此目录中调试的程序。 -
runtimeExecutable要使用的运行时可执行文件的绝对路径。默认值为node。请参阅启动“npm”和其他工具的配置支持部分。 -
runtimeArgs传递给运行时可执行文件的可选参数。 -
runtimeVersion- 如果使用“nvm”(或“nvm-windows”)或“nvs”来管理Node.js版本,则此属性可用于选择特定版本的Node.js. 请参阅下面Multi version support 的多版本支持部分。比如你用“nvm”或者"nvs"安装了node 14,
runtimeVersion可以设置runtimeExecutable:14,会匹配你安装最近的14.x.y的版本。但似乎在配置launch.json的时候,即使用了“nvm”或者"nvs", 这个参数也没怎么设置 -
env可选的环境变量。此属性需要将环境变量作为字符串类型key/value对的列表. -
envFile包含环境变量定义的文件的可选路径. 请参阅下面的 外部文件加载环境变量 below. -
console- 用于启动程序的控制台 (internalConsole,integratedTerminal,externalTerminal). 请参阅下面的 Node Console 部分. -
outputCapture- 如果设置为std,则进程 stdout/stderr 的输出将显示在调试控制台中,而不是通过调试端口侦听输出。这对于直接写入 stdout/stderr 流而不是使用console.*API 的程序或日志库非常有用。
用于attach的配置
restart终止时重新启动连接. 请参阅 自动重新启动调试会话部分.port要使用的调试端口. 要使用的调试端口。请参阅 Attaching to Node.js 和Remote debugging部分address- 调试端口的 TCP/IP 地址. 请参阅 Attaching to Node.js 和Remote debugging部分.processId- 调试器在发送 USR1 信号后尝试附加到此进程。使用此设置,调试器可以附加到未在调试模式下启动的已运行进程。使用该processId属性时,调试端口会根据Node.js版本(和使用的协议)自动确定,并且无法显式配置。因此,不要指定port属性.continueOnAttach- 如果我们附加到该过程时暂停了该过程,是否继续该过程。如果使用--inspect-brk.
常用环境变量
- {workspaceFolder} 在 VSCode 中打开的目录的路径
- {workspaceFolderBasename} 在 VSCode 中打开的目录的名称
- {file} 当前打开的文件
- {relativeFile} 当前打开的文件相对于 workspaceFolder 的路径
- {relativeFileDirname} 当前打开的文件相对于workspaceFolder 的目录名
- {fileBasename} 当前打开文件的名称
- {fileBasenameNoExtension} 当前打开的文件去掉扩展名的名称
- {fileExtname} 当前打开文件的扩展名
- {fileDirname} 当前打开文件的目录路径
- {cwd} 当前执行命令的工作目录
- {lineNumber} 当前行号
- {selectedText} 当前选中的文本
- {execPath} 当前 VSCode 可执行文件的路径
- {pathSeparator} 操作系统文件路径分割符
如何 debugger npm srcripts
开篇说的【RUN AND DEBUG】,选择【运行node.js】是一种,但是我觉得如果 scripts 太多了的话,容易傻傻分不清楚。
1、点击悬浮在 scripts 上面的 Debug,即通过JavaScript Debug Terimal 来调试
也可以打开 JavaScript Debug Terimal 运行命令
2、配置launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch via NPM",
"request": "launch",
"cwd": "${workspaceFolder}/examples/ant-design-pro",
"runtimeArgs": ["run", "dev"], // 代表着npm run dev的意思
"stopOnEntry": true, // 这里无效,还是得靠自己打个断点
"runtimeExecutable": "npm",
"skipFiles": ["<node_internals>/**"],
"type": "node"
}
]
}
使用 Auto Attach
使用 ⇧⌘P ,输入 Toogle Auto Attach 可以启用。 JavaScript Debug Terimal 和它有点类似
有这么些参数可以配置
然后重启终端,或者新建一个,就可以不用通过配置launch.json 启动调试程序,直接在你想debugger的地方打个断点就可以进入了