面试题答案
一键面试- 使用
node inspect
设置断点:- 在普通代码中:
- 在Node.js文件中,使用
debugger
关键字设置断点。例如:
- 在Node.js文件中,使用
- 在普通代码中:
function add(a, b) {
let result = a + b;
debugger; // 设置断点
return result;
}
add(2, 3);
- 然后在终端运行`node inspect your - file.js`,调试器会在遇到`debugger`关键字处暂停。
- 在异步函数中:
- 对于异步函数,同样可以在函数内部使用
debugger
关键字。例如:
- 对于异步函数,同样可以在函数内部使用
async function asyncFunction() {
let value = await Promise.resolve(42);
debugger;
console.log('Value:', value);
}
asyncFunction();
- 运行`node inspect your - file.js`,当异步函数执行到`debugger`处时,调试器会暂停。
- 在回调函数中:
- 在回调函数内部设置
debugger
。例如:
- 在回调函数内部设置
const fs = require('fs');
fs.readFile('example.txt', 'utf8', function (err, data) {
debugger;
if (err) {
console.error(err);
return;
}
console.log(data);
});
- 运行`node inspect your - file.js`,当回调函数被调用执行到`debugger`处时,调试器会暂停。
2. 利用调试会话排查问题:
- 查看变量值:
- 当调试器暂停在断点处时,可以使用
repl
命令进入交互式环境,查看当前作用域内的变量值。例如,在add
函数的断点处,可以在调试器的repl
中输入result
,查看add
函数计算结果的值。
- 当调试器暂停在断点处时,可以使用
- 单步执行:
- 使用
n
(next)命令执行下一行代码,但不进入函数调用内部;使用s
(step)命令执行下一行代码,并进入函数调用内部;使用o
(out)命令从当前函数返回。例如,在异步函数asyncFunction
中,使用n
可以执行到console.log
语句,使用s
可以进入Promise.resolve
内部(如果有自定义的Promise实现逻辑)。
- 使用
- 查看调用栈:
- 使用
bt
(backtrace)命令查看当前的调用栈,了解函数调用的层级关系,这有助于定位问题是从哪里发起的。例如,在复杂的异步调用链中,通过调用栈可以清晰看到是哪个模块、哪个函数触发了当前的异步操作。
- 使用
- 条件断点:
- 在Chrome DevTools等支持的调试工具(与
node inspect
配合)中,可以设置条件断点。例如,在一个循环中,可以设置断点只在循环变量达到特定值时触发,这对于排查特定条件下出现的问题很有帮助。
- 在Chrome DevTools等支持的调试工具(与