模式切换
程序调试与异常处理
使用 console.log()
方法调试程序
console.log()
是最简单且常用的调试方法,可以帮助我们输出变量的值和程序的执行流程,从而帮助定位问题。通过输出中间变量、函数调用的返回值等,我们可以一步步查看程序的运行情况。
示例:
javascript
const num1 = 5;
const num2 = 10;
console.log('num1:', num1); // 输出 num1 的值
console.log('num2:', num2); // 输出 num2 的值
const sum = num1 + num2;
console.log('sum:', sum); // 输出计算结果
使用 WebStorm 调试程序
WebStorm 提供了强大的调试工具,使得调试 Node.js 程序更加便捷。你可以在代码中插入断点,使用图形界面进行调试,查看变量值、调用堆栈等信息。
插入断点
- 打开 WebStorm 并加载你的 Node.js 项目。
- 在代码的某一行上点击行号左侧的灰色区域,插入一个断点。断点是调试时暂停程序执行的地方。
- 插入断点后,程序运行到此行时会暂停,并可以查看变量值和堆栈信息。
删除断点
如果你不再需要断点,可以通过以下方式删除:
- 点击断点所在的行号左侧区域,断点会消失。
- 也可以使用快捷键
Ctrl + F8
(Windows)或Cmd + F8
(Mac)来删除断点。
禁用断点
如果不想删除断点,但又不希望其生效,可以选择禁用断点。禁用断点时,程序运行时不会暂停在断点处。
- 右键点击断点所在行的行号,选择“禁用断点”。
断点调试
- 在 WebStorm 中打开要调试的文件。
- 插入一个或多个断点。
- 点击运行按钮旁边的“调试”按钮(或使用快捷键
Shift + F9
),开始调试程序。 - 程序会在第一个断点处暂停,你可以查看当前的变量值,查看调用堆栈等。
- 在 WebStorm 中提供了控制调试流程的按钮:
- 继续执行:按
F9
或点击继续按钮,程序会继续执行,直到遇到下一个断点。 - 单步跳过:按
F10
或点击跳过按钮,程序会逐行执行,不进入函数内部。 - 单步进入:按
F11
或点击进入按钮,程序会进入当前函数执行。
- 继续执行:按
Node.js 程序异常处理
在 Node.js 中,异常处理是保证程序健壮性的重要一环。我们可以通过 throw
关键字抛出异常、try...catch
语句捕获异常,并在异步编程中进行特殊处理。
使用 throw
关键字抛出异常
throw
用于手动抛出异常。当程序遇到某些不符合预期的情况时,我们可以主动抛出异常,终止程序的正常执行,并通过 catch
块进行捕获。
示例:
javascript
function divide(a, b) {
if (b === 0) {
throw new Error('除数不能为零');
}
return a / b;
}
try {
console.log(divide(10, 0)); // 会抛出异常
} catch (error) {
console.error('捕获到错误:', error.message); // 捕获异常并输出错误信息
}
Error
错误对象
Error
是 JavaScript 中用于表示错误的内置对象,通常通过 new Error()
创建一个错误对象。错误对象包含有用的信息,如错误的消息和堆栈跟踪。
示例:
javascript
const error = new Error('自定义错误');
console.log(error.message); // 错误消息
console.log(error.stack); // 错误堆栈
使用 try...catch
捕获异常
try...catch
是 JavaScript 中用于捕获异常的机制。代码块中的错误会被 catch
语句捕获并处理,这样程序就不会因异常中止。
示例:
javascript
try {
const result = divide(10, 0); // 调用会抛出异常的函数
console.log(result);
} catch (error) {
console.error('发生错误:', error.message); // 捕获并处理错误
}
异步程序中的异常处理
在异步编程中,通常通过回调函数来处理异步操作。当异步操作出现异常时,我们通常会在回调中通过传递错误对象来捕获异常。
示例:使用回调处理异步错误
javascript
const fs = require('fs');
fs.readFile('nonexistent_file.txt', 'utf8', (err, data) => {
if (err) {
console.error('读取文件时出错:', err.message); // 捕获并处理异常
return;
}
console.log('文件内容:', data);
});
示例:使用 async/await
和 try...catch
捕获异步错误
javascript
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('nonexistent_file.txt', 'utf8');
console.log('文件内容:', data);
} catch (err) {
console.error('读取文件时出错:', err.message); // 捕获并处理异常
}
}
readFile();