gdb调试手记
来源:互联网 发布:mac 应用程序开发 编辑:程序博客网 时间:2024/06/06 01:20
gdb调试手记
记录一些gdb的使用经验
假装现在要调试的二进制程序叫a.exe,源文件叫pleaseDebugMe.c
0x00 打开文件
直接输入gdb a.exe
或者打开gdb之后输入file a.exe
0x01 如何下断点
首先用gcc/g++编译C/C++程序时一定要加上-g选项,which means 加上调试信息,就像gcc -g pleaseDebugMe.c
然后用gdb加载之,添加了调试信息之后就很爽了,一般情况下对照源文件直接按照行数下断点就ok。比如要断在源文件中的45行,直接在gdb中b 45
即可。
如果拿到的程序没有调试信息也没有关系,比如现在拿到的二进制文件a.exe是没有调试信息的。那么可以直接先info functions
,查看自己想调的函数叫什么,这里直接以main函数为例好了,可以直接b main
断在main函数的开头。如果需要精确地断在某处,请输入disas main
直接查看汇编,大致看一下自己要断的汇编语句的地址,比如地址在0x00401410,那么就输入b *0x00401410
,这样就成功下了断点了。
如果要查看断点情况,就info b
即可,删除某个断点如断点2就直接delete 2
,删除所有断点就delete breakpoints
info命令很强大,可以info很多东西,除了前面提到的info b / info functions
之外,我常用的还有:
info stack 简化 info s
info frame/frame 1 简化 info f/f 1
info registers 简化 info reg
info variable 简化 info var
0x02 开始调试
现在假设a.exe是个简单递归程序。
假设现在在a.exe下了个断点,相当于pleaseDebugMe.c的45行。输入r(run),程序就跑起来了,直到遇到断点。现在比如我想看第三次递归的情况,我就直接输入多次c(continue),每次输入c程序都会运行到断点后停下来。
来到了想调试的代码附近之后,就可以开始慢慢调试了。
s
Step inton
Step overp var
Print variable- 以上三个命令依赖于Symbol Table,如果编译时没加-g选项就用不了。s和n都是源代码级的调试,一次一行。如果用不了就用下面两个,下面两个是汇编级别的单步。
si
ni
调试过程中注意之前提到的命令们
p
可以打印变量的值info reg
可以查看寄存器中的值info f / f 1 / f 2
可以查看相应栈帧的信息,也可以用frame / frame 1 / frame 2
来查看,只不过后者显示出的信息更简略info b
查看断点info s
查看当前栈x/40w $esp
查看栈顶以下160(40*4)字节的情况
待续
- gdb调试手记
- 调试手记
- GDB调试
- gdb 调试
- gdb调试
- gdb 调试
- GDB调试
- GDB调试
- GDB调试
- GDB调试
- GDB调试
- GDB调试
- gdb 调试
- GDB 调试
- gdb 调试
- GDB调试
- gdb调试
- gdb调试
- 画子图(add_subplot & subplot)
- i3 dmenu 更改后台打开还是终端打开
- centos 安装python3.5.2
- PAT B1015
- NOIP2016 Day2T1 组合数问题
- gdb调试手记
- 『C语言』关于fopen函数的模式字符串
- scrapy源码分析(五)--------------execute函数分析
- 欢迎使用CSDN-markdown编辑器
- 装机步骤(二)之显卡安装和接跳线
- Mapping
- 两个迭代处理以及显示
- js与jQuery对比
- 在git中出现中文乱码的解决方案