整理的,方便以后查看
GDB调试器:
用法 unix > gdb prog
开始和停止
quit exit gdb
run run your program
kill stop your program
断点
break sum set breakpoint at entry to function sum
break *0x8048313 set breakpoint at address 0x8048313
delete 1 delete breakpoint 1
delete delete all breakpoint
执行
stepi execute one instruction
stepi 4 execute four
nexti like stepi ,but proceed through function calls
continue resume execution
finish run until current function resturns
检测代码
disas disassemble current function
disas sum disassemble function sum
disas 0x8048337 disassemble function around address 0x804837
disas 0x8048337 0x8048437 disassemble code with specified address range
检测数据
print /x $eip print program counter in hex
print $eax print %eax in decimal
print /x $eax %eax in hex
print /t %eax in binary
print /x ($ebp + 8) print ($ebp + 8)
print *(int*)0xbffff890 print integer at address 0xbffff890
x/20b sum examine rest 20 bytes of function sum
有用的信息
info frame info about current stack frame
info register values of all registers
help get info about gdb
list list code line(default 10)
watch 观察一个变量的值,每次中断都会显示
start 从main处开始运行调试
用gdb调试代码行,需要在编译中加-g,这个原因在《CSAPP》第七章中有讲到
backtrace(bt) 查看函数调用的栈帧
info(i) locals 查看局部变量
frame(f)ID 选择帧号
print(p) var 打印变量的值
p var1=var2 改变var1的值为var2
list(l) 列出代码行
set var 变量名=变量值
dispaly 变量名 每次到断点的时候都会显示
undisplay
disable breakpoint / enable
break..if.. 设置条件断点
x/7b 地址名 打印指定储存空间的内容,b表示byte,7b表示7个byte
watch 地址 当地址所指向的内存被写入时,中断watchpoint