Linux:gdb的简单使用

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》


前言

gdb是Linux中的调试代码的工具


一、前置理解

我们都知道要调试一份代码,这份代码的发布模式必须是debug。那你知道在linux中,我们编译代码默认是什么模式吗?答案是release模式。
在这里插入图片描述
对test.c文件默认生成的a.out可执行程序调试就知道了。
在这里插入图片描述
按q退出调试界面。

那如何更进一步的证明?
我们要先知道一些小知识。

  • 在debug发布时,一定要给可执行程序内部添加debug信息。(debug形成的可执行程序 > release形成的可执行程序)
  • Linux中形成的可执行程序格式:ELF格式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项
    在这里插入图片描述
    mybin-g文件大小大于mybin-r文件大小

在这里插入图片描述
使用readelf -a 可执行程序 | grep -i debug指令,可以看出mybin-g文件中有debug信息,而mybin-r文件没有
在这里插入图片描述
在这里插入图片描述
mybin-g文件进入调试界面没有(no debugging symbols found)信息显示。

二、使用

  • list / l :显示可执行程序的源码,接着上次的位置往下列,以gdb的格式显示,每次列出10行。
    在这里插入图片描述
    l num(行号):从num行开始显示源代码
    在这里插入图片描述
    l 函数名:列出某个函数的源代码
    在这里插入图片描述

  • break | b 行号:在某一行设置断点
    在这里插入图片描述
    b 函数名:在某个函数开头设置断点
    在这里插入图片描述

  • info break | info b 查看断点信息
    在这里插入图片描述

  • delete breakpoints | d breakpoints:删除所有断点
    在这里插入图片描述
    delete breakpoints n(断点编号) | d n(断点编号):删除序号为n的断点
    在这里插入图片描述
    (注意:断点编号是累计的,退出gdb清空所有断点)
    disable n(断点编号):禁用断点
    在这里插入图片描述
    enable n:启用断点
    在这里插入图片描述


  • run | r:运行程序(类似于VS的F5),遇到断点停止
    在这里插入图片描述
    没有断点在这里插入图片描述
    有断点

  • next | n:单条执行(类似VS的f10)
    在这里插入图片描述

  • step | s:进入函数调用(类似VS的f11)
    在这里插入图片描述

  • finish:执行到当前函数返回,然后停下来等待命令
    在这里插入图片描述

  • until X行号:跳至X行
    在这里插入图片描述

  • p 变量名:打印变量值
    在这里插入图片描述
    set var 变量名 = val:修改变量的值为val
    在这里插入图片描述
    display 变量名:跟踪查看一个变量,每次停下来都显示它的值
    在这里插入图片描述
    undisplay 变量名:取消对先前设置的那些变量的跟踪
    在这里插入图片描述
    breaktrace | bt:查看各级函数调用及参数
    在这里插入图片描述
    info (i)locals:查看当前栈帧局部变量的值
    在这里插入图片描述
    continue | c:从当前位置开始连续而非单步指向程序(从当前断点到下一个断点)
    在这里插入图片描述


总结

以上就是我对于Linux中gdb使用的总结。感谢支持!!!
在这里插入图片描述

相关推荐

  1. Semaphore简单使用

    2023-12-13 01:44:01       52 阅读
  2. 过滤器简单使用

    2023-12-13 01:44:01       66 阅读
  3. html简单使用

    2023-12-13 01:44:01       37 阅读
  4. MongoDB简单使用

    2023-12-13 01:44:01       46 阅读
  5. webpack简单使用

    2023-12-13 01:44:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-13 01:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-13 01:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-13 01:44:01       82 阅读
  4. Python语言-面向对象

    2023-12-13 01:44:01       91 阅读

热门阅读

  1. 人工智能应用专栏----专栏介绍

    2023-12-13 01:44:01       57 阅读
  2. vue递归以及示例

    2023-12-13 01:44:01       54 阅读
  3. 第30期 | GPTSecurity周报

    2023-12-13 01:44:01       52 阅读
  4. 力扣labuladong——一刷day66

    2023-12-13 01:44:01       51 阅读
  5. SpringBoot 面试题和答案,最新面经

    2023-12-13 01:44:01       53 阅读
  6. 不容错过的计算机网络知识点解密!

    2023-12-13 01:44:01       48 阅读
  7. 从理论分析高可用

    2023-12-13 01:44:01       51 阅读
  8. 微信小程序如何跳转到网页

    2023-12-13 01:44:01       52 阅读
  9. 青蛙跳台阶(C语言)

    2023-12-13 01:44:01       56 阅读
  10. 基于深度学习的热红外图像增强算法

    2023-12-13 01:44:01       52 阅读