gdb
好吧,承认我连gdb都不怎么会用,只会r一下,break一下,p一下。。。
发现一份张银奎
巨佬的pptgdb基础
Convenience Variables
GDB维护的伪变量, $开头
$ most recent displayed value
$ $n nth displayed value
$ $$ displayed value previous to $
$ $$n nth displayed value back from $
可以使用set命令定义
set $foo = *object_ptr
Gdb variables
(gdb) set $foo = 4
(gdb) p $foo
$3 = 4
Register Variables
(gdb) break write if $rsi == 2
常用命令
break(b): 软件断点
watch: 硬件断点(其实我从来没打过这个)
backtrace(bt): 显示函数调用序列(栈回溯)
continue(c): 恢复执行
next/step(n/s): 单步
x: 观察内存
info locals: 观察局部变量
pt: 观察数据结构
finish: 执行到函数返回
frame: 查看当前栈帧
i shared: 列模块
附加
gdb --pid=<n>
or
attach process-id
detach => 分离
quit => 杀死
调用函数
call sum(1, 2) #call sum and print ret value
查看变量和内存
变量
print [/f] [expr]
f format:
x hex
d signed decimal
u unsigned decimal
o octal
t binary
a address, absolute and relative
c character
f floating point
内存
x [/Nuf] expr
N count of how many units to display
u unit size, one of:
b individual bytes
h halfwords
w words
g giant words
f printing format, Any `print` format or,
s null-terminated string(就是一条string啦)
i machine instructions
经常用x/10s $esp
或者 x/gx $rsp
之类的命令
其他的
gcc 在编译时候的 -g
选项 是为了 generate debugging information