本地调试
单个文件调试
// 根目录/node/demo1.js
var http = require("http");
const { compileFunction } = require("vm");
http
.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello Node.js\n");
})
.listen(3000, "127.0.0.1");
console.log("Serve running at http://127.0.0.1:3000/");
1. 设置断点
2. 打开调试
按F5键,或者 vscode 左侧工具栏 调试按钮
此时vscode 中的 launch.json 中配置应该为:
{
"type": "node",
"request": "launch",
"name": "启动程序", // vscode 调试方式的名称
"skipFiles": ["<node_internals>/**"],
"program": "${file}" , // 表示调试运行的是当前文件
}
此处的名称 和 launch.json 中的 name 一致
3. 通过curl 发送请求
curl http://127.0.0.1:3000
4. 开始调试
固定文件的调试
调试步骤同上,不同地方是 launch.json 配置
{
"type": "node",
"request": "launch",
"name": "Launch Program", // vscode 调试方式的名称
"program": "${workspaceFolder}/app.js", // 表示调试运行的是当前工作目录下的 app.js
"skipFiles": ["<node_internals>/**"]
},
跨进程调试
将调试程序 附加在某个已经打开的端口(其他进程)
1. 启动远程代码
$ node --inspect node/demo1.js
Debugger listening on ws://127.0.0.1:9229/7b6c8d77-5dc3-42ad-9489-e1481fb719db
For help, see: https://nodejs.org/en/docs/inspector
Serve running at http://127.0.0.1:3000/
启动一个可以用于远程调试的进程,此时 Debugger 监听的端口是 9229,不同场景下也有可能不一样
2. 此时launch.json配置
{
"type": "node",
"request": "attach",
"name": "附加到进程",
"address": "localhost",
"port": 9229
}
3. vscode 中打开调试
此时启动Node.js调试服务,如果看到调试按钮最右边有一个 连接 按钮,表示已经和远程Node.js 线程连接成功,剩下的就和本地调试一样
远程调试
类似于跨进程调试,只需要在lanuch.json 文件中增加address等对远程机器的配置信息
{
"type": "node",
"request": "attach",
"name": "Attach to Remote",
"address": "TCP/IP address of process to be debugged",
"port": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "Absolute path to the remote directory containing the program",
"skipFiles": [
"<node_internals>/**"
]
}
- address 是IP 地址或 域名
- port 是远程端口
- localhost 是本地的代码根目录
- remoteRoot 是远程代码的相对目录