一、什么是程序调试?
调试 = 找错误(Bug)
程序运行不对、崩溃、结果错误、卡死,都需要调试。
调试的目标:
- 找到哪一行出错
- 找到为什么出错
- 把错误修复
二、C语言最常用的 4 种调试方法(从简单到专业)
方法1:printf 打印调试法(新手最实用、万能)
不用任何工具,直接在代码里加打印,看变量值是否正确。
用法:
在关键位置打印:
- 变量值
- 执行到哪一行
- 循环次数
- 函数是否进入
示例:
c
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
// 调试:打印变量是否正确
printf("调试:a=%d, b=%d\n", a, b);
int sum = a + b;
// 调试:看结果是否正确
printf("调试:sum=%d\n", sum);
return 0;
}
优点:
- 简单
- 任何环境都能用
- 新手必学
方法2:单步调试(IDE自带,最强大)
在 Dev-C++、CodeBlocks、VS、Eclipse 里都有。
核心操作:
- 断点:在你想暂停的行点击,出现红点
- 开始调试
- 单步执行(一步一步走)
- 查看变量(实时看值变没变)
常用按钮(所有IDE都一样):
- F5:开始调试
- F10:单步执行(不进入函数)
- F11:单步进入函数
- Shift+F5:停止调试
- 断点:让程序运行到这里自动停下
能解决的错误:
- 死循环
- 变量值错误
- 逻辑错误
- 数组越界
- 指针崩溃
方法3:定位崩溃位置(段错误/程序闪退)
C语言最常见崩溃:段错误(Segmentation fault)
原因通常是:
- 空指针
- 野指针
- 数组越界
- 访问了不该访问的内存
快速定位方法:
- 在函数入口加
printf("进入函数A\n"); - 看程序崩溃前最后打印了什么
- 就能定位崩溃位置
方法4:GDB 调试(Linux/专业开发必备)
如果你用命令行(如Ubuntu、嵌入式环境),必须会 GDB。
使用步骤:
- 编译时加
-g(加入调试信息)
bash
gcc test.c -o test -g
- 启动GDB
bash
gdb test
-
核心命令
run 运行
break 10 在第10行打断点
next 单步
print a 查看变量a的值
quit 退出
三、调试万能步骤(背下来)
不管什么错误,按这个步骤一定能找到:
- 看报错信息(提示哪一行错)
- 加断点/打印,看变量是否正确
- 单步走,看程序执行顺序是否正常
- 检查边界(数组、循环、指针)
- 检查空指针
- 检查内存是否越界
四、C语言最常见的 5 类错误(调试高频)
- 变量未初始化(随机值)
- 数组越界
- 空指针/野指针(崩溃)
- 死循环
- 逻辑错误(结果不对)
五、最简单的调试口诀(超好记)
变量不对加打印,
程序崩溃设断点,
单步执行看流程,
指针一定要判空。