【Linux篇】gdb的使用

💛不要有太大压力🧡
💛生活不是选择而是热爱🧡

在这里插入图片描述

💚文章目录💚

    • 1. 背景知识
    • 2. 使用


1. 背景知识

image-20221004161118331

1. 程序发布的方式有两种,debug模式和release模式

2. Linux下,gcc和g++编译生成的可执行程序默认是release模式

3. 要使用gdb调试,必须在debug模式下进行调试,要加上-g选项

image-20221004162046120

如果写makefile的时候 不加-g选项的话,就无法调试。(没有找到调试信息)

如果用-g选项生成了可执行文件,我们如何查看调试信息呢?

$ readelf -S mytest | grep -i debug

image-20221004163254589

image-20221004163013963

可以查看到调试信息

2. 使用

gdb mytest:进入开始调试

  1. list或l:显示mytest的源代码,后面直接回车即可(因为gdb会记住最近的一条命令,如果命令无变化,可以直接回车),每次显示十行。(默认可能不是从最开始打印)

    image-20221004164802603

  2. list或 l 0:从第一行开始显示

    image-20221004164833880

  3. list/l 函数名:列出某个函数的源代码

  4. run / r:开始调试,如果没有设置断点,就直接运行结束

    image-20221004170101809

  5. break / b 行号:给某一行打断点

    image-20221004183505585

  6. info b:查看断点

    image-20221004183538714

  7. delete / d 断点序号:删除断点

    删除断点要结合 info b来看,因为打断点的时候会自动生成断点的序号

    image-20221004183838054

    单独一个d会删除所有断点

  8. next / n:单条执行.(逐过程)

    image-20221004184833478

  9. print / p 变量:打印变量的值

    image-20221004185032786

  10. step / s:步入.(逐语句,会进入函数)

    image-20221004185605887

  11. bt:查看调用堆栈

    image-20221004185801629

  12. finish:直接运行完当前函数

    如果此时进入了一个函数,但是不想继续一步一步走了,想直接运行完这个函数,就用finish

    注意:finish只能结束main函数之外的函数

    image-20221004190146341

  13. display:长显示

    在循环中,我们时常要查看循环变量的值是多少,可以用长显示让循环变量一直显示着

    image-20221004191004344

  14. undisplay 长显示变量的编号:取消变量的长显示

    给变量长显示之后,会对应前面有一个编号

    image-20221004191325173

  15. until X行号:跳至X行

    注意:until是函数内跳转,不会调到函数外部,如果该函数在main函数中的位置是第18行,那么你输入的行数超过18行,他还是会停在18行

    image-20221004191810525

  1. continue / c :跳到下一个断点

    image-20221004193234028

    image-20221004193335281

    并且跳到下一个断点的时候,两个断点中间的代码是被执行了的

  2. disable 断点编号:禁用断点

    image-20221004195157283

  3. enable 断点编号:启用断点

    image-20221004195226499

  4. set var 变量名 = 值:设置变量的值

    image-20221004195637328

  5. 打印自定义类型 或者 数组

    p就可以做到

    image-20221004200357383

    image-20221004200422449

    可以看到,p命令直接就把自定义类型或者数组中的元素全显示出来了

✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519651.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot实现多线程开发(使用@Async注解,简单易上手)

根据springboot的核心思想便捷开发,使用多线程也变得简单起来,通过一下几个步骤即可实现。 核心注解 EnableAsync将此注解加在启动类上,使项目支持多线程。 Async 使用我们的Async注解在所需要进行多线程的类上即可实现。 配置线程池 …

腾讯云服务器和阿里云服务器价格测评_2024年费用大PK

2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

WebStorm安装教程 【2023年新版安装图解】

​Webstorm相关介绍 WebStorm是一款功能强大、易用且高效的开发工具,为Web开发者提供了全方位的支持。无论是初学者还是经验丰富的开发者,都能从中受益。如果你想要提高开发效率、减少出错概率,不妨试试WebStorm,它将成为你的得力…

WEB自动化测试----------Webdriver API 的使用

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

动态规划(算法竞赛、蓝桥杯)--乱杀的状态压缩DP

1、B站视频链接&#xff1a;E25 状态压缩DP 小国王_哔哩哔哩_bilibili 题目链接&#xff1a;[SCOI2005] 互不侵犯 - 洛谷 #include <bits/stdc.h> using namespace std; int n,k;//棋盘行数、国王总数 int cnt;//一行合法状态的个数 int s[1<<12];//一行合法状态…

GCN 翻译 - 2

2 FAST APROXIMATE CONVOLUTIONS ON GRAPHS 在这一章节&#xff0c;我们为这种特殊的的图基础的神经网络模型f(X, A)提供理论上的支持。我们考虑一个多层的图卷积网络&#xff08;GCN&#xff09;&#xff0c;它通过以下方式进行层间的传播&#xff1a; 这里&#xff0c;是无…

调用Mybatis plus中的saveBatch方法报找不到表的问题

1.问题现象 在用Mybatis plus开发的项目中&#xff0c;用自带的API批量保存的方法saveBatch操作时&#xff0c;发现报没有找到表的错误。 错误日志截图如下&#xff1a; 表实际是存在的&#xff0c;且发现其他的方法都没有问题&#xff0c;包括save、update等单个的方法&…

tomcat搭建个人博客 实现动静分离

jar包相关 .war&#xff1a;WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar&#xff1a;EJB类文件的打包压缩类zip格式文件&#xff0c;,包括很多的class文件, 网景公司发明 .rar&#xff1a;资源适配器类打包文件&#xff0c;目前已不常…

TabLayout预览不了?

<TableLayoutandroid:layout_width"wrap_content"android:layout_height"wrap_content"/> 当然预览不了了&#xff0c;这其实不是我要的控件。 而实际需要的是TabLayout 不是TableLayout &#xff01;&#xff01;&#xff01; <com.google.an…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展&#xff0c;php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll&#xff0c;php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接&#xff1a;PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …

一周学会Django5 Python Web开发-Django5修改视图UpdateView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计31条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时&#xff0c;如果被调用的微服务因各种原因无法在规定时间内提供服务&#xff0c;则可以直接使用本地的服务作为备选&#xff0c;即进行降级熔断。 如之前所提到的微服务为例&#xff1a; 如果希望实现降级熔断&#xff0c;可以在本地创建一个实现…