找回密码
 注册
搜索

11. 调试GDB一(示例)

已有 111 次阅读2014-2-5 17:21 |个人分类:Linux编程| 调试GDB, linux编程, linux编程

1.  编译

要使用GDB调试程序,必须确保被调试程序的可执行文件内附加了调试信息,为此,gccg++编译源代码时需要使用-g选项。

gcc –g example.c –o example

2.  运行

       shell终端中,使用gdb命令附加程序名作为参数来运行GDB,例如:“gdb example”。或者使用gdb命令直接启动GDB,然后在GDB中使用file命令来装载要调试的程序,例如:“file example”。这两种方式都假设在包含程序的目录中执行命令。装载程序之后,可以使用GDB内置的run命令来启动程序。

3.示例

       如果一切顺利,程序将运行到结束,此时的GDB将重新获得控制权,即有机会执行GDB的内置命令。如果程序在执行的过程中因为错误而崩溃,GDB会记录下崩溃之前的堆栈信息,方便用户查找信息。下面举一个实例来演示整个调试的过程。演示代码example.c:

       #include <stdio.h>

      

       int wib(int no1, int no2)

       {

              int result, diff;

             

              diff=no1 -  no2;

              result=no1/no2;

              return result;

}

 

       int main(int agrc, char *argv[])

{

       int value, div, result, I, total;

 

       value=10;

       div=6;

       total=0;

 

       for(i=0; i<10; i++)

       {

              result=wib(value, div);

              total+=result;

              div++;

              value--;

             

       }

printf(“%d wibed by %d equals %d \n”,value,div,total);

 

return 0;

}

由上述代码可知,该程序将运行10for循环,使用wib函数计算出累计值,最后打印出结果。经过前面的编译、运行GDB两个步骤以后,使用GDB内置的run命令运行程序。

GDB指出在程序第8行收到一个算术异常中断信号,同时给出wib函数的参数值,以及收到该中断的代码行内容。要查第8行前后的源代码,可使用list命令,它通常会打印10行,再次执行list(或者回车重复上一条命令)命令将列出程序的下10行。从GDB消息中可以看出,第8行的除法运算出了错误,程序在这一行中将变量no1除以diff。要查看变量的值,可使用GDB内置的print命令(或者简写p)并制定变量名,即输入print no1”和“print diff”。

GDB指出no1等于8diff等于0。根据这些值和第8行中的语句,可以推断出算术异常是由除数为0的除法运算造成的。清单显示了第8行中计算的变量diff,可以使用“print no1-no2”命令打印计算diff变量的表达式,来重新估计这个变量。GDB告诉我们wib函数的这两个变量都等于8,于是我们要检查调用wib函数的main函数,以查看这是在什么时候发生的。为了继续运行程序,执行continue命令。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 10:38 , Processed in 0.039391 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部