gdb专题——一个完整的gdb调试过程以及一些常用的命令——面试必考

参考来源:博文01https://blog.csdn.net/qq_37941471/article/details/81476942
(动手实践才是真理)

一、博文01

1. 启动调试 (两步): (1)gcc -g test.c (2)gdb a.out

(1)gcc -g test.c // 编译文件,生成可执行程序,并且必须给文件加上调试信息
(2)gdb a.out // 开始启动调试
补充:
gcc –g test.c –o haha // 编译文件,生成可执行程序haha,并且给文件加上调试信息

在这里插入图片描述

在这里插入图片描述

  1. 显示当前的代码:l (list的简写)
    在这里插入图片描述
另外:
l 函数名  // 显示这个函数的代码(默认显示10行)
  如果想继续查看,继续输入该命令
3. 在某一行打断点(break):b 行号

b(break)
在这里插入图片描述

4. 开始运行程序:r( run )

在这里插入图片描述

5. 逐步执行:s( step ) ,类似于VS中的F11

在这里插入图片描述

6. 重复上条命令:不输入任何命令,直接enter

在这里插入图片描述

7. 查看某个变量的变化:print 变量名

在这里插入图片描述

8. 查看变量的类型:whatis 变量名

在这里插入图片描述

9. 看函数的堆栈:bt

在这里插入图片描述

10. 结束调试:finish

在这里插入图片描述

11. 进入下一次调试:n( next )

在这里插入图片描述

12. 退出(quit)调试:q

在这里插入图片描述

二、简单总结

黑马程序员:本节课所讲知识总结

  1. 程序中除了一目了然的Bug(漏洞,臭虫)之外都需要一定的调试手段来分析到底错在哪。到目前为止 我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,就基本上证明了自己 假设的错误原因,就可以动手修正Bug了,如果结果和预期的不一样,就根据结果做进一步 的假设和分析。本章我们介绍一种非常强大的调试工具gdb,可以完全操控程序的运行,使 得程序就像你手里的玩具一样,叫它走就走,叫它停就停,并且随时可以查看程序中所有的 内部状态,比如各变量的值、传给函数的参数、当前执行的语句位置等。掌握了gdb的用法 以后,调试的手段就更加丰富了。但要注意,即使调试的手段非常丰富了,其基本思想仍然 是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环,根据现象如何假 设错误原因,以及如何设计新的现象去验证假设,这都需要非常严密的分析和思考,如果因 为手里有了强大的工具就滥用,而忽视了严谨的思维,往往会治标不治本地修正Bug,导致 一个错误现象消失了但Bug仍然存在,甚至是把程序越改越错。本章通过几个初学者易犯的 错误实例来讲解如何使用gdb调试程序,在每个实例后面总结一部分常用的gdb命令。
  2. Gdb调试总结
    1.启动gdb
    start 只执行一步
    n next 单步
    s step(单步) 可以进入到函数体内部
    c continue 直接执行代码停在断点的位置
    2.查看代码
    l list
    l 10 函数名
    l filename: 行号 函数名
    3.设置断点
    设置当前文件断点
    b—— break
    b 10
    b 10 (函数名) :给某个函数的第10行设置断点
    b filename:行号 (函数名)
    设置指定文件断点
    b filename:行号 (函数名)
    设置条件断点:
    b 10 if 变量名19 如: b 10 if value19
    删除断点:
    delete del d
    d 断点的编号

4.参看设置的断点
获取断点编号:
info i
info b
5.开始执行gdb调试
执行一步操作
继续执行
执行多步,直接停在断点处
6. 单步调试
7.查看变量的值 p print
8.查看变量的类型 ptype 变量名
9.设置追踪变量
自动打印变量的值: display 变量名
取消追踪变量 undisplay 编号 (不会用的百度)
上面的编号:获取编号 info display

手动打印变量的值:print——p
获取变量对应的类型:ptype
9.跳出循环 u
10.退出gdb调试
quit q

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值