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模式;