DevC++调试程序详解(图文并茂,新手必看)
所谓调试程序,就是控制编译器一行一行地执行代码,过程中可以清楚地看到每个变量值的变化情况、函数的调用过程等,进而发现程序中隐藏的错误或者低效的代码。
Dev C++ 作为一款免费、开源的 C/C++ IDE,内嵌了 GCC 编译器和 GDB 调试器,既能编译、运行程序,也能调试程序。
在学习如何程序调试之前,先创建一个用于调试的程序代码:
Dev C++ 中给程序设置断点的方法很简单。单击代码所在行的行号,即可添加一个断点,如下图所示。

图 1 添加断点
添加断点后,单击“编译运行”按钮运行程序时,断点不会生效。只有单击“调试”按钮运行程序时,断点才会生效。Dev C++ 中,与编译、运行、编译运行、调试相关的 4 个按钮如下图所示:

图 2 Dev C++中按钮作用
单击“调试”按钮,或者按 Fn+F5 快捷键,程序开始执行,直到第7行代码处(当前行代码尚未运行)暂停,如下图所示。

图 3 开始调试
程序暂停执行后,借助调试窗口中的按钮可以查看某些变量的值,还可以控制编译器继续往下执行程序。调试窗口中部分常见按钮的用法如下:
例如,循环输出一组数的累加和,代码如下:

图 4 添加要监控的变量
初始状态下,变量 sum 的值为 0;

图 5 监控变量
调试过程中,Dev C++ 支持同时监控多个变量,还支持在程序中设置多个断点,如下图所示。

图 6 多个断点和监控多个变量
Dev C++ 在 Windows 10 上的兼容性并不好,有时会出现各种问题。例如,某些版本的 Dev C++ 调试 C++ 程序时,遇到 endl 会出现“卡死”的情况,无法继续调试程序。遇到这种情况,最简单的解决方案是:将 endl 用 ‘\n’ 替换。
Dev C++ 作为一款免费、开源的 C/C++ IDE,内嵌了 GCC 编译器和 GDB 调试器,既能编译、运行程序,也能调试程序。
在学习如何程序调试之前,先创建一个用于调试的程序代码:
#include <stdio.h> #include <string.h> // 包含字符串函数头文件 int main(int argc, char *argv) { printf("Hello World!\n"); // 添加代码开始 char *str = new char[100]; // 定义字符串变量 strcpy(str, "Hello Word!"); // 给字符串赋值 int s, a, b; // 定义整型变量 a = 5; // 赋初值 b = 10; s = a + b; // 求和 printf("str:%s\n", str); // 输出字符串 printf("s:%d\n", s); // 输出求和结果 // 添加代码结束 return 0; }程序运行结果为:
Hello World!
str:Hello Word!
s:15
DevC++进入调试状态
默认情况下,程序会瞬间从开头执行到结尾,除非中途出现运行时错误。要想让程序暂停执行,就需要设置一个断点(BreakPoint)。可以把断点简单地理解成障碍物,汽车遇到障碍物不能通行,程序遇到断点就会暂停执行。Dev C++ 中给程序设置断点的方法很简单。单击代码所在行的行号,即可添加一个断点,如下图所示。

图 1 添加断点
添加断点后,单击“编译运行”按钮运行程序时,断点不会生效。只有单击“调试”按钮运行程序时,断点才会生效。Dev C++ 中,与编译、运行、编译运行、调试相关的 4 个按钮如下图所示:

图 2 Dev C++中按钮作用
开始调试
调试是发现程序错误的有效方法。通过简单的调试操作,可以解决程序设计中出现的大部分错误。单击“调试”按钮,或者按 Fn+F5 快捷键,程序开始执行,直到第7行代码处(当前行代码尚未运行)暂停,如下图所示。

图 3 开始调试
程序暂停执行后,借助调试窗口中的按钮可以查看某些变量的值,还可以控制编译器继续往下执行程序。调试窗口中部分常见按钮的用法如下:
- “添加查看”按钮:查看某个变量的值,还可以看到值的变化情况;
- “下一步”按钮:控制编译器向下执行一行语句;
- “跳过”按钮:继续执行程序,遇到下一个断点暂停执行;
- “停止执行”按钮:停止调试程序;
- “单步进入”按钮:功能和“下一步”按钮类似,不同之处在于,当程序中调用某个自定义函数时,此按钮可以进入函数内部,继续调试函数内部的代码。
变量的跟踪与查看
设置断点后,进入调试运行状态。按 F7 键单步执行到变量所在代码行时,Variables 窗口中将显示当前代码行中变量的值,根据这个值可判断程序计算是否正确。例如,循环输出一组数的累加和,代码如下:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int sum = 0; for (int i = 0; i < 10; i++, i++) sum += i; cout << sum << "\n"; return 0; }设置断点于第 8 行“sum +=i;”语句,开始调试后,单击“添加查看”按钮,监视变量 sum 值的变化情况,如下图所示:

图 4 添加要监控的变量
初始状态下,变量 sum 的值为 0;
- 单击“下一步”按钮(或按 F7 键),执行第 8 行代码,箭头光标指向第 9 行,变量 sum 的值仍为 0。
- 再次单击“下一步”按钮,执行第 9 行代码,箭头指向第 6 行,变量 sum 的值仍为 0。
- 再次单击“下一步”按钮,执行第 6 行代码,箭头指向第 8 行,变量 sum 的值仍为 0。
- 再次单击“下一步”按钮,执行第 8 行代码,箭头指向第 9 行,变量 sum 的值变为 2,如下图所示:

图 5 监控变量
调试过程中,Dev C++ 支持同时监控多个变量,还支持在程序中设置多个断点,如下图所示。

图 6 多个断点和监控多个变量
调试的注意事项
程序修改后,调试之前一定要先进行编译。Dev C++ 在 Windows 10 上的兼容性并不好,有时会出现各种问题。例如,某些版本的 Dev C++ 调试 C++ 程序时,遇到 endl 会出现“卡死”的情况,无法继续调试程序。遇到这种情况,最简单的解决方案是:将 endl 用 ‘\n’ 替换。