ubuntu gdb调试第一次实验总结

时间:2021-04-16 14:20:35

ubuntu下将一个hello.c文件经过预编译(.i)、编译(.s)、汇编(.o)、链接到可执行文件hello.out的过程的命令行为:

gcc -E hello.c -o hello.i

gcc -S hello.i -o hello.s

gcc -c hello.s -o  hello.o

gcc hello.o -o hello.out

运行:./hello.out

gdb : gdb hello.out 或 gdb -q(安静模式) hello.out


断点:
添加断点 : b 3(行号) 或b main(函数名) b 标号(_start+1)
查看所有断点信息: info reg breakpoints
删除断点 : delete breakpoint Num(Num为断点的序号,不是断点所在行号)

运行程序 :r(run)
下一步 :n(next)  或 s(step),执行到某个函数方法时,step可以跳进函数里面,next会直接跳过
退出当前循环 :finish

display : 设置程序中断后欲显示的数据和格式
常用的: : display /i $pc 
($pc代表当前汇编指令,/i代表16进制,这条语句执行了,每次程序中断的时候都能看到即将执行的汇编指令)
如display /d $eip:每次程序中断的时候都会以10进制打印出eip的值
undisplay <编号>: 取消前面的display设置,以后每次程序中断就不会显示使用display命令要求显示的值了


查看所有的寄存器: info reg
查看某个寄存器  : info reg eax(寄存器名),也可用print /d $eax(数据格式,d是十进制, $eax(寄存器))
查看标志寄存器 : print $eflags

查看变量a的值 : print  a
查看变量a的地址 : print &a

查看内存     : x/5bt,查看5个字节(b),以二进制形式显示(t),x/5bx,x代表(16进制)显示,b也可换成w(4字节)或h(2字节)
: 计算机的内存是有尊严的,不是啥都让你随便访问
查看帮助 : help  如查看有关breakpoint的命令  help breakpoint

补全命令提示 : 连按2下Tab


窗口:
查看汇编窗口 : layout asm
源代码和汇编窗口同时显示: layout split
退出窗口,回到传统模式下:Ctrl+x,再按a

查看源代码 :list 
查看源代码n到m行:list n,m

设置list默认显示的m行: set listsize m 


传统模式下:
显示当前目录下文件:   ls
删除某个文件 :   rm demo.c(删除demo.c文件)