linux下用gdb调试c程序

首先要用gdb调试C/C++程序的话,得在编译时将调试信息添加到可执行文件中,使用gcc的 -g参数便可以做到这点。如:

gcc -g -Wall -o test test.c

编译完后边要启动gdb,方法如下:

$gdb test

如果对gdb的命令不熟,可通过help来查询,如下:

(gdb)help

gdb 的命令很多,gdb把之分成许多个种类。help命令只是例出gdb的命令种类,如果要看种类中的命令,可以使用help <class> 命令,如:help breakpoints,查看设置断点的所有命令。也可以直接help <command>来查看命令的帮助。

gdb中,输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了,当然,命令的前几个字符应该要标志着一个唯一的命令,在Linux下,你可以敲击两次TAB键来补齐命令的全称,如果有重复的,那么gdb会把其列出来。

使用list命令可以查看应用程序的源码,如下:

(gdb)list 或者(gdb)list n1,n2  //列出n1和n2行之间的代码


添加断点

(gdb)break main

断点设置还有其他方法,如下:

命令                               断点方式

break function                在函数上设置一个断点

break file:function         在指定文件的函数上设置一个断点

break line                       在指定行号的行设置断点

break file:line                 在指定文件的指定行号设置断点

break address              在一个物理地址设置断点

查看断点信息

(gdb)info breakpoints

移除断点

(gdb)clear  11(11为我断点设置的行号)

设置断点后然后执行:

(gdb)run

run命令启动应用程序,然后达到设置的第一个断点后,便会显示出下面将要执行的一行代码

关于断点的设置,其实还有一种断点设置方法便是条件断点,条件成立才添加断点,如下:

(gdb)break test if op==5      //如果参数op等于5,则再函数test处添加断点。

单步调试

单步调试有如下几个命令

next、step、continue

next表示执行下一行,不进入函数体,相当于一般图形化的调试程序的step over

step 表示执行下一行,进入函数体,相当于图形界面的step into

continue 表示继续执行程序直到下一个断点

其实hia可以在next和step命令后面添加一个数值,表示这个命令执行的次数,eg:step5,表示执行5次step命令

监控变量

使用display命令来查看变量的值,如:

(gdb)display array[0]        //查看数组中第一个元素的值

设置变量

gdb也可以在调试过程中设置变量的值,使用set命令即可完成,如下:

(gdb)set array[8]=100      //设置数组array[8]值为100

检查堆栈

使用backtrace命令可以查看堆栈中的情况,获得当前函数的压栈情况,如:

(gdb)backtrace

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章