最近在学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	// 尽可能反汇编出源代码










