转自 https://blog.csdn.net/21cnbao/article/details/7385161
1、list命令
用法:list <linenum>
list <function>
2、run命令
程序运行参数:
set args arg1 arg2
show arg
运行环境:
path <dir>可设定程序的运行路径
show paths 查看运行路径
3、break命令
在gdb中用break命令来设置断点,设置断点的方法包括:
break <function>
break <linenum>
break +offset / break -offset
break filename:linenum
break filename:function
break *address 在程序运行的内存地址处停住。
break
break命令没有参数时,表示在下一条指令处停住。
break ... if <condition>
“...”可以是上述的break <linenum>、break +offset / break –offset中的参数,condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if i=100,表示当i为100时停住程序。
info
查看断点时,可使用info命令,如info breakpoints [n]、info break [n](n表示断点号)。
4、单步命令
step <count>
单步跟踪,如果有函数调用,则进入该函数(进入函数的前提是,此函数被编译有debug信息)。step后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住。
next <count>
单步跟踪,如果有函数调用,它不会进入该函数。同样地,next后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住。
set step-mode
set step-mode on用于打开step-mode模式,这样,在进行单步跟踪时,程序不会因为没有debug信息而不停住,这个参数的设置可便于查看机器码。set step-mod off用于关闭step-mode模式。
finish
运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
until (缩写u)
一直在循环体内执行单步,退不出来是一件令人烦恼的事情,until命令可以运行程序直到退出循环体。
stepi(缩写si)和nexti(缩写ni)
stepi和nexti用于单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。 另外,运行“display/i $pc”命令后,单步跟踪会在打出程序代码的同时打出机器指令,即汇编代码。
5、print
p /x var /t 二进制
p *array@10
display ss
7、watch命令
watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。
我们有下面的几种方法来设置观察点:
watch <expr>:为表达式(变量)expr设置一个观察点。一旦表达式值有变化时,马上停住程序。
rwatch <expr>:当表达式(变量)expr被读时,停住程序。
awatch <expr>:当表达式(变量)的值被读或被写时,停住程序。
info watchpoints:列出当前所设置了的所有观察点。 下面演示了观察i并在连续运行next时一旦发现i变化,i值就会显示出来的过程:
8、examine命令
我们可以使用examine命令(缩写为x)来查看内存地址中的值。examine命令的语法如下所示:
x/<x/f/u> <addr>
x/s 0x100000f2e
(gdb) x /x 0x7fffffffe3d0
0x7fffffffe3d0: 0x00000001
(gdb) x /f 0x7fffffffe3d0
0x7fffffffe3d0: 1.40129846e-45
(gdb) x /n 0x7fffffffe3d0
0x7fffffffe3d0: 1
(gdb) x /t 0x7fffffffe3d0
9、set命令
修改内存:
(gdb) set {unsigned int}0x8048a51=0x0
10、jump命令
11、signal命令
14、info命令
info命令可以在调试时用来查看寄存器、断点、观察点和信号等信息。
要查看寄存器的值,可以使用如下命令:
info registers (查看除了浮点寄存器以外的寄存器)
info all-registers (查看所有寄存器,包括浮点寄存器)
info registers <regname ...> (查看所指定的寄存器)
info break 查看断点信息
info watchpoints 列出当前所设置的所有观察点,
info signals info handle 查看有哪些信号正在被GDB检测,
info line命令来查看源代码在内存中的地址。
info threads可以看多线程。
info line后面可以跟行号、函数名、文件名:行号、文件名:函数名等多种形式,例如下面的命令会打印出所指定的源码在运行时的内存地址:
16、disassemble
disassemble命令用于反汇编,它可被用来查看当前执行时的源代码的机器码,其实际上只是把目前内存中的指令dump出来。下面的示例用于查看函数fun
17、shell cmd执行linux命令