gdb调试
| 
 | 
 | 
开始调试execfile;
list
list,简写为l,显示源文件;命令格式:
arg1为起始行号,arg2为结束行号;显示arg1行到arg2行之间的代码;
未设置arg1和arg2 时,默认显示10行;
break
break,简写b,设置断点;命令格式:
location可以是function(函数名) | linenum(行号) | address(偏移地址);
run、stepi、info
run
run,简写r,运行程序;
stepi
stepi,简写si,执行一条指令;命令格式:
N意味着执行N条指令(或者到程序结束处);
info
info,简写i,显示一些调试信息;
print,简写p,Examining Data,打印寄存器中的值或打印变量中的值;命令格式:
registers表示寄存器,如eax,ebx,ecx,edx,esi, edi, esp, ebp, eflags等;
fmt参数如下表:
| format letter | description | 
|---|---|
| o | octal | 
| x | hex | 
| d | decimal | 
| u | unsigned decimal | 
| t | binary | 
| f | float | 
| a | address | 
| i | instruction | 
| c | char | 
| s | string | 
| z | hex,zero padded on the left | 
| 
 | 
 | 
examine
x,全称:examine;Examining Memory,打印内存单元中的值;命令格式:
address表示内存单元地址;
n是一个整数,表示显示几个内存单元;默认是1;
f表示格式化,见上表;默认是x;
u表示内存单元大小,见下表:
| unit letter | description | 
|---|---|
| b | Bytes | 
| h | HalfWords(two bytes) | 
| w | Words(four bytes, default) | 
| g | Giant words(eight bytes) | 
| 
 | 
 | 
display
display,Automatic Display,自动显示,每次运行完一条指令自动打印显示列表中的值;命令格式:
display会根据设置的fmt,expr或者address自动判断是调用x还是print。
quit
quit,简写q,退出gdb;
shell
需要在gdb中执行shell命令时,可以使用shell;命令格式:
TUI模式
gdb提供TUI(Text User Interface)模式,方便调试代码;
进入TUI模式
利用gdb -tui execfile命令进入gdb,可以开启TUI模式;
进入gdb之后通过快捷键ctrl+x a或者使用命令tui enable开启TUI模式;
layout
可以利用layout命令调整TUI中的布局;通过help layout可以查看帮助;命令格式:
next下一个布局,prev上一个布局,layoutname见下表:
| layoutname | description | 
|---|---|
| src | 源码布局 | 
| asm | 汇编布局 | 
| split | 源码,汇编,cmd布局 | 
| regs | 寄存器布局 | 
winheight
调整布局的大小,命令格式:
winname见下表:
| winname | description | 
|---|---|
| src | 源码窗口 | 
| asm | 汇编窗口 | 
| cmd | 命令窗口 | 
| regs | 寄存器窗口 | 
+表示窗口winname增大lines行,-表示窗口winname减小lines行;
focus
利用focus可以让焦点关注不同的窗口;命令格式:
next下一个窗口,prev上一个窗口,winname见上表;
当cmd不被focus时,在cmd中方向键不起作用,若要使用方向键,此时方向键命令同emacs一样(ctrl+p向上,ctrl+n向下,ctrl+f向右,ctrl+b向左);
refresh
refresh刷新窗口;
关闭TUI模式
ctrl+x a既可以开启TUI,也可以关闭TUI;tui disable关闭TUI模式;