1. 使用內置調試器(node inspect)
Debian系統下,可通過Node.js內置的node inspect命令啟動調試模式?;居梅樵趩討脮r添加--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”標簽頁分析內存占用情況。