1. 使用内置调试器(node inspect)
Debian系统下,可通过Node.js内置的node inspect命令启动调试模式。基本用法为在启动应用时添加--inspect(允许附加)或--inspect-brk(启动时暂停)标志,例如:
node --inspect-brk app.js # 应用在第一行暂停,等待调试器连接
这会在默认端口9229上启动调试服务器,后续可通过Chrome DevTools或VS Code等工具连接调试。
2. 配置Visual Studio Code(VS Code)调试
VS Code是Debian下调试Node.js的高效工具,需通过launch.json文件配置调试环境:
Ctrl+Shift+D);{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/app.js", // 入口文件路径
"skipFiles": ["<node_internals>/**"] // 忽略Node.js内部文件
}
]
}
F5即可启动调试,支持断点、单步执行(F10/F11)、查看变量等功能。3. 使用Chrome DevTools调试
Chrome浏览器的DevTools提供了图形化调试界面,适合复杂项目的可视化调试:
--inspect-brk标志(如node --inspect-brk app.js);chrome://inspect;4. 利用debug模块进行模块化调试
debug模块(npm install debug)是Node.js推荐的日志调试工具,支持按命名空间控制输出,避免日志混乱:
const debug = require('debug')('myapp:server'); // 定义命名空间
debug('Server started on port 3000'); // 输出调试信息
DEBUG启用指定命名空间的调试:DEBUG=myapp:server node app.js # 仅输出myapp:server命名空间的日志
myapp:database)或开启颜色输出(DEBUG_COLORS=true)提升可读性。5. 使用console.log进行快速调试
console.log是最基础的调试方法,适合快速验证变量值或执行流程:
console.log语句,输出变量、对象或堆栈信息:console.log('User data:', user); // 打印变量
console.dir(user, { depth: null }); // 格式化打印对象
console.trace('Error occurred'); // 打印堆栈跟踪
console.log语句,避免影响生产环境。6. 调试异步代码的技巧
异步代码(如Promise、async/await)需特别注意调用顺序,推荐使用以下方法:
try/catch捕获Promise中的错误,避免未处理的拒绝:async function fetchData() {
try {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
console.log(data);
} catch (err) {
console.error('Fetch error:', err); // 捕获并打印错误
}
}
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
7. 日志管理与性能分析
对于生产环境或复杂项目,需使用专业日志工具和性能分析手段:
winston或log4js实现分级日志(info/error)、日志文件分割及远程传输:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('Application started'); // 写入info日志
heapdump模块生成内存快照,分析内存泄漏:npm install heapdump
const heapdump = require('heapdump');
setInterval(() => {
heapdump.writeSnapshot(`/tmp/heap-${Date.now()}.heapsnapshot`); // 生成快照
}, 60000); // 每分钟生成一次
快照可通过Chrome DevTools的“Memory”标签页分析内存占用情况。