通俗易懂说GDB调试(一)基础

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

17. disas sum 反汇编函数

disas 				Disassemble current function 反汇编当前函数
disas sum 			Disassemble function sum	反汇编指定函数sum
disas 0x80483b7		Disassemble function around address Ox80483b7 反汇编指定地址
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值