gdb的相关信息,本文就不做介绍了,本文只是在自己平时调试的基础上,进行了一些总结
1、启动和退出gdb
一般有3种方式来启动gdb,,如下所示
第一种:gdb helloworld,这也是最常见的
第二种:gdb helloworld core.pid,在这种方式中,我们预先获得了一个被调试程序的一个core文件core.pid
core文件是程序崩溃时所生成的内存转存文件,通过该文件可以还原程序崩溃时的情景。如果程序崩溃时没有生成 core文件,可以运行“ulimit -c 50000”命令后再试试
第三种:gdb helloworld pid,这是使用gdb调试已运行程序的启动方式,其中pid是通过ps命令获得进程号。
2、断点设置
使用break可以设置软件程序断点,其中设置主要有以下几种方法:
第一、以函数名为break命令的参数,断点会设置在该函数的开始处,如:break main
第二、通过指定文件名和行号的方式指定断点位置,如break helloword.c:20
当调用break命令不带参数时,gdb会在程序指针寄存器所指的位置设置一个断点
第三、使用if设置断点有效时应该满足的先进条件,当表达式的值为非0时程序中断才发生,表达式既可以使用全局变量,也可以使用断点所在函数的局部变量,如:break main.c:7 if a = 1
第四、调试一个多线程程序时,可以在break命令中指定是断点有效的线程号,如 break location [thread threadnum] [if condition]
第五、如果只希望设置一次有效断点,可以使用tbreak命令(temporary break)
第六、使用rbreak命令可以以正则表达式的方式在多个函数中设置断点
3、断点操作
第一、查询当前设置的断点 info breakpoints
第二、使能/禁止断点 enable <断点号>/disable <断点号>
第三、删除一个断点delete [断点号],当没有断点号时将删除所有断点
4、硬件程序断点
使用hbreak命令可以设置硬件程序断点,其命令格式与break是完全一样的。通过show 命令可以了解处理器所支持的硬件断电数,如:show can-use-hw-breakpoints
5、数据断点
数据断点的设置需要使用watch命令,其参数是我们所希望观察到被改变的变量名,或者是一个已知的内存地址。
注意:如果想对局部变量使用watch命令,则需要程序已经停止在变量所在的函数内,对于全局变量就没有这一限制。此外,对于32位处理器,数据断点只能用于监视类型为32位的数据。
6、事件断点
gdb还提供了catch命令以便我们捕获调试期间的事件,事件包括信号、程序开始、程序终止和C++中的异常等。
7、命令
until命令:该命令是设置我们希望的停止点,如until 115,停止在115行