Node.js 调试应用
掌握调试技巧,快速定位和解决问题。
console 调试
最基本的调试方式:
JavaScript
// 输出信息
console.log('普通日志');
console.info('信息日志');
// 输出警告
console.warn('警告信息');
// 输出错误
console.error('错误信息');
// 输出对象
const obj = { name: 'Tom', age: 25 };
console.log(obj);
console.dir(obj); // 更清晰的格式
// 输出表格
console.table([{ name: 'Tom' }, { name: 'Jerry' }]);
// 计时
console.time('操作');
doSomething();
console.timeEnd('操作'); // 输出耗时
// 断言
console.assert(1 === 2, '断言失败'); // 输出错误
// 堆栈追踪
console.trace('追踪点');
Node Inspector 调试
Bash
# 启用调试模式
node inspect index.js
# 或使用 --inspect
node --inspect index.js
node --inspect-brk index.js # 启动时暂停
# 输出调试地址
# Debugger listening on ws://127.0.0.1:9229/...
打开 Chrome DevTools:
- 访问
chrome://inspect - 点击 "Open dedicated DevTools for Node"
- 在 Sources 面板调试
VS Code 调试
创建调试配置
JSON
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceFolder}/index.js"
},
{
"type": "node",
"request": "attach",
"name": "附加到进程",
"port": 9229
}
]
}
调试操作
JavaScript
// 设置断点:点击行号左侧
// 调试快捷键
F5 // 开始调试
F9 // 切换断点
F10 // 单步跳过
F11 // 单步跳入
Shift+F11 // 单步跳出
Ctrl+Shift+F5 // 重启调试
Shift+F5 // 停止调试
条件断点
JavaScript
// 右击行号 → 添加条件断点
// 条件表达式:i === 5
// 命中次数:只有第 5 次才暂停
debugger 语句
JavaScript
function processData(data) {
debugger; // 代码在此暂停
const result = transform(data);
debugger; // 检查结果
return result;
}
// 运行调试模式
node --inspect index.js
watch 监视变量
在 VS Code 调试面板:
JavaScript
// 添加监视表达式
// 点击 Watch 面板的 + 按钮
// 输入变量名或表达式
// 示例监视
result
data.length
obj.name
调试面板功能
| 面板 | 功能 |
|---|---|
| Variables | 查看当前变量 |
| Watch | 监视表达式 |
| Call Stack | 调用堆栈 |
| Breakpoints | 断点列表 |
| Debug Console | 执行调试命令 |
远程调试
Bash
# 指定调试端口和地址
node --inspect=0.0.0.0:9229 index.js
# 允许远程连接(需安全环境)
node --inspect-brk=0.0.0.0:9229 index.js
使用 ndb 调试器
Bash
# 安装 ndb
npm install -g ndb
# 使用 ndb 启动
ndb node index.js
# 自动打开 DevTools 界面
调试技巧
分步调试复杂逻辑
JavaScript
function complexCalculation(input) {
const step1 = parse(input);
console.log('step1:', step1); // 检查每步结果
const step2 = transform(step1);
console.log('step2:', step2);
const step3 = finalize(step2);
console.log('step3:', step3);
return step3;
}
异步代码调试
JavaScript
async function fetchData() {
try {
const data = await fetch(url);
debugger; // 检查 data
const parsed = await data.json();
debugger; // 检查 parsed
return parsed;
} catch (err) {
console.error('错误:', err);
debugger; // 错误时暂停
}
}
内存调试
JavaScript
// 查看内存使用
console.log(process.memoryUsage());
// 使用 heapdump 分析内存泄漏
// npm install heapdump
const heapdump = require('heapdump');
heapdump.writeSnapshot('dump.heapsnapshot');
常见调试场景
| 场景 | 方法 |
|---|---|
| 值异常 | console.log 或断点 |
| 异步错误 | try-catch + debugger |
| 性能问题 | console.time/timeEnd |
| 内存泄漏 | process.memoryUsage |
| 逻辑错误 | 单步调试 |
要点总结
- console.log/time/trace 是基础调试工具
- node --inspect 启用调试模式
- VS Code 提供图形化调试界面
- debugger 语句在代码中设置暂停点
- 使用 Watch 监视变量变化
- 分步调试复杂逻辑,逐步检查结果
📝 发现内容有误?点击此处直接编辑