前言
在写比较复杂的程序的过程中,初次完成的代码往往不完全按照设计的思路运行,要么存在BUG,要么流程不严谨出现了意想不到的执行路径,或者对硬件、资源等估计不足出现异常死机、系统崩溃等,这个时候调试器就是解决问题的好工具,在他的帮助下能够快速的定位异常的位置,极大的提升你优化和修改程序的效率。在CodeBlocks中,虽然工具不大,调试功能一点也不弱,默认支持 GCC、MSVC 等多种编译器,还支持 GDB 或者 CDB 调试器。如何进行代码调试昵?下面就详细讲讲
调试环境的准备:
利用 CodeBlocks 调试程序,就是控制执行器按照调试的需求,可以在设定的关键代码处够停下来,按照指令逐行、单步、断点等方式执行代码,执行过程中还要能够清楚看到每个变量值的变化情况、函数的调用过程等,观察程序是否按预期的情况在执行,如果遇到变量值与预期不符,进而发现程序中隐藏的错误。 接下来,我们以我的拓扑识别项目中一段完整的 C 语言程序为例,讲解如何在 CodeBlocks 中调试程序。
配置调试环境
一般在安装codeblock时,如果安装的是
的版本,调试器默认都是和编译器一块安装的,如果选择了其他的方式,就需要配置codeblock调试程序需要使用的调试器,通过菜单setting–>debug进入debug配置对话框:
此处选择默认的mingw编译器自带的gdb.exe作为调试器。
调试工具条
调试工具条如下图:
做过做过嵌入式或者vc编程的工程师应该都很熟悉,和Keil,IAR和vc的调试工具条基本一样,在此不再一一介绍,唯一感觉有点不太习惯的是,keil,iar等的调试器进入debug模式后,会自动停止main入口函数处等待用户下一步的指令,而codeblock的gdb调试不会,会直接继续执行,所以, 调试程序时要预先设定好断点在进行开始debug操作,否则就是全速执行程序的操作了。或者直接选择第二个执行到当前光标处的按钮,这样就不会进入全速执行模式了。
开始调试
以本人拓扑识别项目中,DFT测试例程为例,
光标预先调到程序第84行,选择执行到当前光标处按钮,
同时,打开调试windows的watch窗口
执行后如下图
可以看出,此时i=0,lsd=194,结果数据正确
使用watch窗口监视之后可以看见各变量的值,单步逐行调试也可以看见它们什么时候发生了变化,在这个程序中,i=0会随着循环的运行逐步增长到N,lsd的值也从第一个值194逐步到samp50jz数组的第N个值150。如果程序的运行结果不符合我们的预期,就要向前或向后逐步跟踪,找到问题根源,一步步地调试程序,知道所以功能完全正常。