最近在学OS(Ubuntu,X86_64),想看看从C接口到系统调用的过程,但是写了个小代码发现,使用C接口时(比如fopen)只会以callq的形式被调用,所以打算学一下gdb。说来惭愧,以前一直没有系统学过,偶尔用用得查半天。
顺便发现了一个好网站,里面整理了很多linux工具的用法
GDB
- 启动和退出
g++ -g a.cpp -o a
gdb a // 启动
q // 退出
- 调试运行
run(r) // 运行程序到下个断点处停止
continue(c) // 继续执行到断点处
next(n) // 单步跟踪
step(s) // 单步调试,进入函数
- 设置断点
break(b)
b n // 在第n行设置断点
b func // 在func入口处加断点
info b // 查看断点情况
- 源代码
list(l) // 查看程序源代码,默认10行
- 打印信息
print exp // 打印表达式的信息
objdump
- 反汇编
objdump -D main // 反汇编所有section
objdump -S main // 尽可能反汇编出源代码