调试基础 #

调试功能概览 #

VSCode 内置了强大的调试功能,支持多种语言和运行时环境。

text
┌─────────────────────────────────────────────────────────────┐
│                     调试界面布局                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                     │   │
│  │                   代码编辑区                         │   │
│  │                                                     │   │
│  │   → let result = calculate(a, b);  // 断点          │   │
│  │                                                     │   │
│  └─────────────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  变量 │ 监视 │ 调用堆栈 │ 断点                       │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │  result: 42                                         │   │
│  │  a: 10                                              │   │
│  │  b: 32                                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

启动调试 #

基本操作 #

功能 Mac Windows/Linux 说明
开始调试 F5 F5 启动调试会话
开始调试(无调试) ⌃F5 Ctrl+F5 运行不调试
停止调试 ⇧F5 Shift+F5 停止调试会话
重启调试 ⇧⌘F5 Shift+Ctrl+F5 重启调试会话

调试配置 #

创建 .vscode/launch.json 文件:

json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceFolder}/index.js"
        }
    ]
}

断点管理 #

设置断点 #

功能 Mac Windows/Linux 说明
切换断点 F9 F9 添加/移除断点
条件断点 - - 右键菜单设置
日志点 - - 右键菜单设置

断点类型 #

text
1. 普通断点:程序在此暂停
2. 条件断点:满足条件时暂停
3. 日志点:输出消息但不暂停
4. 命中计数断点:执行指定次数后暂停

设置条件断点 #

text
1. 右键点击行号
2. 选择 "添加条件断点"
3. 输入条件表达式
4. 当条件为 true 时暂停

示例:
• i > 10
• user.name === 'Alice'
• count % 2 === 0

调试控制 #

单步执行 #

功能 Mac Windows/Linux 说明
单步跳过 F10 F10 执行当前行,不进入函数
单步进入 F11 F11 进入函数内部
单步跳出 ⇧F11 Shift+F11 跳出当前函数
继续 F5 F5 继续执行到下一个断点

单步执行示例 #

javascript
function calculate(a, b) {
    let result = a + b;  // ← 断点在这里
    return result;
}

let sum = calculate(10, 20);  // ← F10 跳过,F11 进入
console.log(sum);

变量查看 #

查看变量 #

功能 Mac Windows/Linux 说明
查看变量值 - - 鼠标悬停查看
添加到监视 - - 右键添加到监视

变量面板 #

text
变量面板显示:
• 局部变量
• 全局变量
• 闭包变量

展开对象可以查看属性值

监视表达式 #

添加监视 #

功能 Mac Windows/Linux 说明
添加监视 - - 在监视面板添加表达式

监视示例 #

text
添加监视表达式:
• user.name
• items.length
• calculateTotal()
• a + b

实时显示表达式的值

调用堆栈 #

查看调用堆栈 #

功能 Mac Windows/Linux 说明
查看调用堆栈 - - 在调用堆栈面板查看

调用堆栈示例 #

text
调用堆栈显示函数调用顺序:

calculate (index.js:10)
↳ processOrder (index.js:25)
  ↳ main (index.js:50)
    ↳ <anonymous> (index.js:60)

点击任意帧跳转到对应代码位置

调试控制台 #

使用调试控制台 #

功能 Mac Windows/Linux 说明
打开调试控制台 - - 切换到调试控制台标签

调试控制台功能 #

text
调试控制台可以:
• 执行表达式
• 查看变量值
• 调用函数

示例:
> user.name
'Alice'

> calculateTotal()
42

> items.filter(i => i.active)

调试实战案例 #

案例1:调试循环 #

javascript
for (let i = 0; i < 100; i++) {
    processItem(items[i]);  // ← 设置条件断点:i > 50
}

// 当 i > 50 时暂停
// 检查 items[51] 的值

案例2:调试异步代码 #

javascript
async function fetchData() {
    const response = await fetch(url);  // ← 断点
    const data = await response.json(); // ← 断点
    return data;
}

// 使用 F11 进入 async 函数
// 使用 F10 跳过 await

案例3:调试事件处理 #

javascript
button.addEventListener('click', (event) => {
    handleClick(event);  // ← 断点
});

// 点击按钮触发事件
// 在断点处暂停
// 检查 event 对象

调试工作流 #

text
┌─────────────────────────────────────────────────────────────┐
│                     调试流程                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  发现问题                                                    │
│     │                                                       │
│     ├─────▶ 设置断点                                         │
│     │        │                                              │
│     │        └─▶ F9 或点击行号                              │
│     │                                                       │
│     ├─────▶ 启动调试                                         │
│     │        │                                              │
│     │        └─▶ F5                                        │
│     │                                                       │
│     ├─────▶ 单步执行                                         │
│     │        │                                              │
│     │        ├─▶ F10 单步跳过                               │
│     │        ├─▶ F11 单步进入                               │
│     │        └─▶ ⇧F11 单步跳出                             │
│     │                                                       │
│     ├─────▶ 查看变量                                         │
│     │        │                                              │
│     │        ├─▶ 鼠标悬停                                   │
│     │        └─▶ 变量面板                                   │
│     │                                                       │
│     └─────▶ 继续执行                                         │
│                │                                            │
│                └─▶ F5                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

快捷键速查表 #

调试控制 #

功能 Mac Windows/Linux
开始调试 F5 F5
停止调试 ⇧F5 Shift+F5
重启调试 ⇧⌘F5 Shift+Ctrl+F5
运行不调试 ⌃F5 Ctrl+F5

单步执行 #

功能 Mac Windows/Linux
单步跳过 F10 F10
单步进入 F11 F11
单步跳出 ⇧F11 Shift+F11
继续 F5 F5

断点管理 #

功能 Mac Windows/Linux
切换断点 F9 F9
启用/禁用断点 - -

常见问题 #

Q: 调试时断点不生效? #

A: 确保 launch.json 配置正确,并且代码已编译(如 TypeScript)。

Q: 如何调试 Node.js 项目? #

A: 创建 launch.json,配置 "type": "node",然后按 F5 开始调试。

Q: 如何调试前端代码? #

A: 使用 “Debugger for Chrome” 扩展,或在浏览器开发者工具中调试。

练习建议 #

练习1:基本调试 #

text
1. 创建一个简单的 JavaScript 文件
2. 设置断点
3. 使用 F5 开始调试
4. 使用 F10 单步执行

练习2:条件断点 #

text
1. 创建一个循环
2. 设置条件断点
3. 观察特定条件下的变量值

练习3:调试函数 #

text
1. 创建一个包含多个函数的程序
2. 使用 F11 进入函数
3. 使用 ⇧F11 跳出函数
4. 查看调用堆栈

下一步 #

现在你已经掌握了调试技巧,接下来学习:

最后更新:2026-04-11