通俗易懂说GDB调试(一)基础
- 0. 什么是GDB
- 1. GDB常用命令说明
- 1. 命令 ulimit -c ,打开coreDump
- 2. 命令 -g ,开启GDB调试
- 3. 命令 l(ls) ,查看源代码
- 4. 命令 b(breakpoint) ,添加断点
- 5. 命令 r(run) ,开始执行程序,直至断点停止
- 6. 命令 n(next) ,单步调试
- 7. 命令 s(step) ,单步调试,进入函数内执行
- 8. 命令 p(print) ,打印输出数据
- 9. 命令 q(quit)或ctrl+d ,退出调试
- 10. 命令 start ,开始执行,并使程序停在main第一行
- 11. 命令 c(continue) ,继续执行,直到下一个断点
- 12. 命令 info(infomation) ,查看入参,局部变量
- 13. 命令 d(delete) ,删除断点
- 14. 命令 set ,修改变量或入参
- 15. 什么是调用堆栈?
- 16. 参考
- 17. disas sum 反汇编函数
通俗易懂说GDB调试(一)
https://blog.csdn.net/lqy971966/article/details/88963635
通俗易懂说GDB调试(二)
https://blog.csdn.net/lqy971966/article/details/102812016
通俗易懂说GDB调试(三)总结
https://blog.csdn.net/lqy971966/article/details/103118094
0. 什么是GDB
- GDB全称是:The GNU Project Debugger;称为GNU调试器
- UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
- 功能:
启动、暂停、停止程序的运行;
调试出现崩溃、有逻辑错误的程序时给程序设置断点;
在程序设置的断点处停止程序运行,查看变量的实际值 、寄存器的值;
除了在断点处可以查看变量之外,还可以在不改变程序源码的情况下改变一些变量的值。
1. GDB常用命令说明
1. 命令 ulimit -c ,打开coreDump
一般默认情况下,core file的大小被设置为了0,这样系统就不dump出core file了。修改后才能生成core文件。
ulimit是一个shell内建的命令:
ulimit 是 shell 内建
通过该命令,我们可以设置当前shell环境中的一些资源限制值
1.1 设置core大小为无限
ulimit -c unlimited
1.2 设置文件大小为无限
ulimit unlimited
2. 命令 -g ,开启GDB调试
在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(
cc/gcc/g++)的 -g 参数可以做到这一点
1. gcc -g Wall -o hello.out hello.c //编译hello.c
2. gdb hello.out //调试 hello.out
3. 进入 gdb 之后,先加上必要的断点
4. 然后run 运行程序即可,如果有参数加上参数:run abc等
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行
时的内存地址。
3. 命令 l(ls) ,查看源代码
4. 命令 b(breakpoint) ,添加断点
如: 按照函数来添加断点: b testFunc
按照行号来添加断点: b 13
5. 命令 r(run) ,开始执行程序,直至断点停止
6. 命令 n(next) ,单步调试
n 到下一步. 不管子过程如何都不进入. 直接一次跳过
7. 命令 s(step) ,单步调试,进入函数内执行
s 遇到子函数,会进入函数内部调试.
8. 命令 p(print) ,打印输出数据
如: print var //查看变量的值
print/x var //查看变量的值,十六进制显示
print var=value //修改变量的值为制定值
print sizeof(A) //显示数据占用内存大小
9. 命令 q(quit)或ctrl+d ,退出调试
10. 命令 start ,开始执行,并使程序停在main第一行
11. 命令 c(continue) ,继续执行,直到下一个断点
12. 命令 info(infomation) ,查看入参,局部变量
如: info args //显示当前函数的入参
info local //查看当前函数的局部变量值
info b //查看断点信息
13. 命令 d(delete) ,删除断点
如: d 1 //删除断点1
d //删除所有断点
14. 命令 set ,修改变量或入参
如: set var=value //设置变量值
15. 什么是调用堆栈?
调用堆栈: 是当前函数之前的所有已调用函数的列表(包括当前函数)
bt 打印调用堆栈
16. 参考
[1]: https://www.cnblogs.com/life2refuel/p/5396538.html
17. disas sum 反汇编函数
disas Disassemble current function 反汇编当前函数
disas sum Disassemble function sum 反汇编指定函数sum
disas 0x80483b7 Disassemble function around address Ox80483b7 反汇编指定地址