||
要使用GDB调试程序,必须确保被调试程序的可执行文件内附加了调试信息,为此,gcc或g++编译源代码时需要使用-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;
}
由上述代码可知,该程序将运行10次for循环,使用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等于8,diff等于0。根据这些值和第8行中的语句,可以推断出算术异常是由除数为0的除法运算造成的。清单显示了第8行中计算的变量diff,可以使用“print no1-no2”命令打印计算diff变量的表达式,来重新估计这个变量。GDB告诉我们wib函数的这两个变量都等于8,于是我们要检查调用wib函数的main函数,以查看这是在什么时候发生的。为了继续运行程序,执行continue命令。
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.