1、list命令
在gdb中运行list命令(缩写l)可以列出代码,list的具体形式包括: •list <linenum> ,显示程序第linenum行周围的源程序 2、run命令
在gdb中,运行程序使用run命令。在程序运行前,我们可以设置如下4方面的工作环境: •程序运行参数
3、break命令
在gdb中用break命令来设置断点,设置断点的方法包括: •break <function> 在进入指定函数时停住,C++中可以使用class::function或function(type, type)格式来指定函数名。 •break <linenum> 在指定行号停住。 •break +offset / break -offset 在当前行号的前面或后面的offset行停住,offiset为自然数。 •break filename:linenum 在源文件filename的linenum行处停住。 •break filename:function 在源文件filename的function函数的入口处停住。 •break *address 在程序运行的内存地址处停住。 •break break命令没有参数时,表示在下一条指令处停住。 •break ... if <condition>
4、单步命令
在调试过程中,next命令用于单步执行,类似VC++中的step over。next的单步不会进入函数的内部,与next对应的step(缩写s)命令则在单步执行一个函数时,会进入其内部,类似VC++中的step into。下面演示了step命令的执行情况,在23行的add()函数调用处执行step会进入其内部的“return a+b;”语句:
5、continue命令
当程序被停住后,可以使用continue命令(缩写c,fg命令同continue命令)恢复程序的运行直到程序结束,或到达下一个断点,命令格式为:
6、print命令
在调试程序时,当程序被停住时,可以使用print命令(缩写为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: 01.print <expr> 02.print /<f> <expr>
<expr>是表达式,是被调试的程序中的表达式,<f>是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x。在表达式中,有几种GDB所支持的操作符,它们可以用在任何一种语言中,“@”是一个和数组有关的操作符,“::”指定一个在文件或是函数中的变量,“{<type>} <addr>”表示一个指向内存地址<addr>的类型为type的一个对象。
7、watch命令
watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点: watch <expr>:为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。rwatch <expr>:当表达式(变量)expr被读时,停住程序。awatch <expr>:当表达式(变量)的值被读或被写时,停住程序。
gdb 可以让您通过使用 shell 命令在不退出调试环境的情况下运行 shell 命令,调用形式是 ‘shell [commandline]‘,这有助于在调试时更改源代码。