程序运行上下文
- set args:可指定运行时参数。例:set args 10 20 30
- show args:命令可以查看设置好的运行参数。
- run ( r ):运行程序。
- run > outfile:将程序的输出结果重定向到outfile文件中。
- info terminal:显示你程序用到的终端的模式。
- tty /dev/tty1:在gdb下tty命令可以设置输入输出使用的终端设备。退出gdb后使用tty可以查看当前终端设备的名称。
- info inferiors:显示GDB调试的所有inferior(每一个被调试程序的执行状态记录在一个名为inferior的结构中,一般情况下一个inferior对应一个进程),GDB会为他们分配进程ID,其中带有*的进程是正在调试的inferior
断点的设置和管理
设置断点
- break:在当前位置设置断点,可以简写为b
- b 10:设置断点,在源程序第10行
- b func:设置断点,在func函数入口处
管理断点
- info b:显示所有断点信息。
- delete breakpoints 1:删除断点1。
- delete breakpoints:删除所有断点。
- disable breakpoint 1:禁用断点1。
- enable breakpoint 1:允许使用断点1。
- clear number或者func:清除在number行或者func上的所有断点。
函数的调用
(gdb) call main
$1={int (int, char **)} 0x40052d <main>
(gdb) call printf("abcd")
$2=4
显示数据
- print value:检查各个变量的值。
- whatis / ptype value:显示某个变量的类型。
- watch expr:设置观察点,在变量或表达式expr的值有变化时,马上停住程序。
- info watchpoints:列出当前设置的所有观察点。
栈相关命令
- backtrace ( bt ):查看函数调用栈信息。
- frame(f) num:查看第num层栈信息。
- info args:打印当前函数的参数名及值。
- info locals:打印当前函数的所有局部变量及值。
寄存器
- info registers:打印除浮点和矢量寄存器(xmm,ymm,zmm)之外的所有寄存器。
- info all-registers:打印所有寄存器,包括浮点和向量寄存器。
有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:
$pc: 程序计数器
$fp: 帧指针(当前堆栈帧)
$sp: 栈指针
$ps: 处理器状态
其他
- run ( r ):运行你的程序。
- quit:退出gdb。
- continue ( c ):继续执行直到下一个停止点。
- step ( s ):单步调试下一步,会进入函数。
- next ( n ):单步调试下一步,不会进入函数。
- ni / si:下一条指令,进入函数/不进入函数。
- finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。
- until ( u ):执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止。
- disassemble:输出汇编代码。