天天看点

通俗易懂说GDB调试(一)0. 什么是GDB1. GDB常用命令说明

通俗易懂说GDB调试(一)

  • 0. 什么是GDB
  • 1. GDB常用命令说明
    • 1. 命令 ulimit -c ,打开coreDump
      • 1.1 设置core大小为无限
      • 1.2 设置文件大小为无限
    • 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. 参考

通俗易懂说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

  1. GDB全称是:The GNU Project Debugger;称为GNU调试器
  2. UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具
  3. 功能:

    启动、暂停、停止程序的运行;

    调试出现崩溃、有逻辑错误的程序时给程序设置断点;

    在程序设置的断点处停止程序运行,查看变量的实际值 、寄存器的值;

    除了在断点处可以查看变量之外,还可以在不改变程序源码的情况下改变一些变量的值。

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

继续阅读