调试程序 · Debug

📌 一句话理解

调试就是“找Bug、修Bug”:程序出问题了,你像侦探一样找出原因,然后修复它。


🐛 什么是调试?

调试(Debug) 是指发现和修复计算机程序错误的过程。程序员写代码不可能一次就完美,调试是编程中必不可少的一步。

┌─────────────────────────────────────────────────────────────────┐
│                    调试 = 找Bug + 修Bug                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────┐      ┌─────────┐      ┌─────────┐               │
│   │ 写代码  │ ──► │ 运行    │ ──► │ 出问题  │               │
│   │        │      │ 程序    │      │ (Bug)   │               │
│   └─────────┘      └─────────┘      └────┬────┘               │
│                                          │                     │
│                                          ▼                     │
│   ┌─────────┐      ┌─────────┐      ┌─────────┐               │
│   │ 继续写  │ ◄── │ 修复    │ ◄── │ 定位    │               │
│   │ 代码    │      │ 问题    │      │ 原因    │               │
│   └─────────┘      └─────────┘      └─────────┘               │
│                                                                 │
│   调试工具帮助你一步步找出问题在哪里                               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

🔧 调试程序能做什么?

功能说明类比
设置断点让程序停在某一行,别往下跑按暂停键
单步执行一行一行慢慢执行代码慢动作回放
查看变量看某个变量当前的值是多少查体温
修改变量临时改个值,看看效果换药试试
调用栈看程序是怎么一步步走到这里的看行动路线
┌─────────────────────────────────────────────────────────────────┐
│                    断点调试示意                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   代码:                                                        │
│                                                                 │
│   1  let total = 0;                                            │
│   2  for(let i=1; i<=100; i++){                                │
│   3      total = total + i;      ← 🔴 断点设在这里              │
│   4  }                                                         │
│   5  console.log(total);                                       │
│                                                                 │
│   程序运行到第3行会暂停,你可以看:                               │
│   • 此时 i 等于多少?                                            │
│   • 此时 total 等于多少?                                        │
│   • 循环进行到第几次了?                                          │
│                                                                 │
│   如果发现 total 的值不对,就知道问题在哪                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

🐞 Bug 这个词是怎么来的?

时间事件
1947年哈佛大学马克二号计算机出故障
原因技术人员发现一只飞蛾卡在继电器里
结果把飞蛾取出后,机器恢复正常
影响从此,计算机错误被称为 Bug(虫子)
排除错误被称为 Debug(除虫)
┌─────────────────────────────────────────────────────────────────┐
│                    第一个Bug                                     │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   操作日志原文:                                          │   │
│   │   “First actual case of bug being found.”              │   │
│   │   (发现第一个真实的Bug案例)                             │   │
│   │                                                         │   │
│   │   那只飞蛾被贴在日志本上,现在还在华盛顿博物馆             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   这就是“Bug”的由来!                                            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

💡 小提示:现在程序员还是把程序错误叫“Bug”,修复叫“Debug”。


🛠️ 常见的调试工具

工具/环境怎么用
浏览器开发者工具按F12打开,调试网页JavaScript
VS Code编程软件自带的调试功能
Python DebuggerPython语言自带的调试模块
Chrome DevTools前端程序员最常用的调试工具

🏠 生活中的调试类比

场景类比到调试
数学题做错了一步步检查计算过程,找出哪一步错了
家里灯不亮检查灯泡、开关、电闸,找到问题原因
菜做咸了回忆放了哪些调料,下次少放盐
组装家具出错看说明书,检查哪一步装反了

🔄 调试的基本步骤

┌─────────────────────────────────────────────────────────────────┐
│                    调试五步法                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ① 复现问题                                                    │
│   └─► 让Bug稳定出现(“每次点这个按钮都会闪退”)                   │
│                                                                 │
│   ② 定位问题                                                    │
│   └─► 用断点、日志缩小范围(“问题出在这个函数里”)               │
│                                                                 │
│   ③ 分析原因                                                    │
│   └─► 找出根本原因(“这里变量是null,不应该调用方法”)           │
│                                                                 │
│   ④ 修复问题                                                    │
│   └─► 改代码(“加个判断,如果变量是null就不调用”)               │
│                                                                 │
│   ⑤ 验证修复                                                    │
│   └─► 再测试,确认Bug真的没了                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

✅ 自测小问题

  1. 调试(Debug)是什么意思?
  2. “Bug”这个词是怎么来的?
  3. 调试程序能帮你做什么?
点击查看答案
  1. 发现和修复计算机程序错误的过程
  2. 1947年,一只飞蛾卡在计算机继电器里导致故障,从此把程序错误叫Bug(虫子)
  3. 设置断点、单步执行、查看变量、修改变量、查看调用栈

📚 教材链接

  • 教材位置:第二章 2.1.2 信息系统的组成