Dev-C++ 机试调试
适用场景:复试上机时使用 Dev-C++ 编写和调试 C/C++ 程序。
目标:把最常用的环境配置、调试流程、代码片段和提交前检查集中到这一份。
1. 先把环境配对
1.1 常用界面操作
Tools下的环境设置可以切换界面语言。Ctrl + 鼠标滚轮可以放大或缩小编辑器字体。
1.2 编译与调试选项
进入 Tools > Compiler Options,重点确认这几项:
- 编译参数建议包含:
1 | -g -O0 -std=c++11 -Wall -Wextra -DLOCAL |
- 关闭优化:调试阶段优先用
-O0。 - 打开调试信息:在代码生成或链接相关选项里,把
Generate debugging information/产生调试信息设为Yes。 - 修改编译选项后,执行一次
Rebuild All,不要只点普通编译。
说明:
-g:让断点、单步、变量查看生效。-O0:避免优化导致行号乱跳、变量被优化掉。-DLOCAL:方便在本地打开调试输出,提交前再关闭。
2. 上机时最实用的操作顺序
- 先把题目输入格式确认清楚,写最小可运行版本。
- 编译一次,先排掉语法错误和头文件问题。
- 用最小样例跑通,再测边界样例。
- 如果结果不对,优先用“断点 + Watch + 少量输出”定位。
- 如果程序崩溃,先查数组越界、空指针、循环边界。
- 提交前关闭调试开关,重新编译,再跑一遍样例。
3. Dev-C++ 里怎么调试最有效
3.1 断点打在哪里
- 循环问题:打在循环入口、循环体第一行、下标更新前。
- 分支问题:打在
if/else if判断前。 - 指针问题:打在
*p、a[i]、node->next这类访问前。 - 函数问题:打在调用前和函数入口处。
不要一开始满屏断点。先用 2 到 4 个关键断点缩小范围。
3.2 单步执行怎么选
Step Over:执行当前行,不进入函数内部。默认优先用它。Step Into:进入函数内部。怀疑子函数有问题时再用。Step Out:从当前函数退回调用处。进太深时很有用。Continue:继续运行到下一个断点。
3.3 Watch 盯哪些变量
优先盯这些:
- 循环变量:
i、j、k - 边界变量:
n、m、len - 结果变量:
ans、sum、cnt - 指针或节点:
p、head、tail - 当前读入值:
x、y、ch
建议一次只加 3 到 5 个最关键变量,避免界面太乱。
3.4 调试输出什么时候更快
当循环很多、断点停太频繁时,直接加少量输出更快:
1 | cerr << "DEBUG i=" << i << " a[i]=" << a[i] << " sum=" << sum << '\n'; |
建议统一加 DEBUG 前缀,提交前一起删掉或通过宏关闭。
4. 常见问题排查顺序
4.1 数组越界
- 检查下标是否可能
< 0或>= n - 重点盯
i、j、n - 在
a[i]访问前打断点
4.2 死循环
- 看循环变量是否真的在变化
- 看退出条件是否有机会满足
- 打印每轮的
i/j/cnt/sum
4.3 指针异常
- 解引用前先判断是否为
nullptr - 检查是否访问了失效对象
- 链表重点看
next,树结构重点看左右孩子
4.4 输入输出异常
- 检查读入格式是否和题目一致
- 不要混用
cin/cout和scanf/printf - 对关键读入值做短输出确认
4.5 断点失效
- 通常是没开
-g - 或者改完编译选项后没
Rebuild All - 或者优化没有关掉
5. 机试时可直接复制的代码片段
5.1 快速输入输出
1 | ios::sync_with_stdio(false); |
5.2 本地调试开关
1 |
5.3 打印 vector
1 |
|