【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧

  • 上一篇文章学习了如何使用GDB进行函数调用栈的查看:【软件开发底层知识修炼】十六 快速学习GDB调试四 使用GDB进行函数调用栈的查看
  • 本篇文章是GDB调试快速学习系列的最后一篇。将综合前几篇文章做一个小的总结以及介绍一些在调试中使用的小技巧

文章目录

  • 1 调试中的小技巧
    • 1.1 断点处自动打印示例
    • 1.2 使用GDB进行符号查看
  • 2 使用GDB进行代码调试中的技巧案例分析
  • 3 总结

1 调试中的小技巧

直接上一个图,下面就是今天介绍的几个技巧命令:

在这里插入图片描述

  • 其中shell命令,后面代码调试分析的时候就明白了。

1.1 断点处自动打印示例

在这里插入图片描述

  • 可以看出,当我们在test.c的18行打上断点,运行程序到断点处,然后使用display命令,打印几个值。那么在下一次,如果程序继续运行,又到了test.c的18行的这个断点处,那么GDB会自动将刚刚使用display打印的那几个值打印出来。而不用像我们以前一样,每一次想看哪个值都需要使用print命令。

1.2 使用GDB进行符号查看

在这里插入图片描述

  • 符号查看可以看到符号的类型。并且我们从上图中也可以看到whatis与ptype的区别:ptype可以查看更加详细的类型。

2 使用GDB进行代码调试中的技巧案例分析

tricks.c

#include <stdio.h>int g_var = 1;struct ST
{int i;int j;
};int func()
{struct ST st[5] = {0};int i = 0;for(i=0; i<5; i++){st[i].i = i;st[i].j = i * i;}for(i=0; i<5; i++){printf("st[%d].i = %d\n", i, st[i].i);printf("st[%d].j = %d\n", i, st[i].j);}
}int main()
{static c_var = 2;func();return 0;
}
  • 上述程序比较简单,这里不多做解释
  • 我们以前都是编译好程序之后,再进入GDB进行调试。现在知道GDB支持shell,那么可以在先进入GDB后,再进行编译。在GDB中,前面加上shell命令,后面可以跟任何shell所支持的命令,如下动态图就是支持shell的各种命令的演示,编译好程序后直接start:
    在这里插入图片描述
  • 然后我们对tricks.c的18行进行打断点(使用break tricks.c:18命令)。并使用list tricks.c:18 命令查看tricks.c的18行上下的部分内容。如下图:
    在这里插入图片描述
  • 我们发现,这个展示的内容不够详细,我们想要展示tricks.c的18行上下附近更多的内容,可以使用set listsize 20来设置list每次展示的内容的行数,如下图所示:
    在这里插入图片描述
  • 接下继续运行程序:continue
  • 到了18行的时候,就停下来了,此时我们使用如下三个命令来显示i,i*i,以及&i
    display /d i
    display /d i*i
    display /a &i
  • 结果如下图所示:
    在这里插入图片描述
  • 可以看到,每一次展示都打印出了我们所想要的值。接着我们继续运行程序:continue 由于有一个for循环,所以还会在18行再次停止执行,然而这次停止执行后,就会自动打印刚刚我们使用display所想要展示的三个值,如下图:
    在这里插入图片描述
  • 很明显,我们并没有再使用display或者print来打印那三个变量,但是在这里却自动打印了。这就是断点处自动打印的功能:display的功能
  • 我们退出刚刚的GDB调试,再重新进入GDB调试,然后直接只用run进行运行程序,发现上一次设置的断点和display的设置还在。使用undisplay即可去除display的设置。然后继续运行程序:continue,程序在18行断点处停下,然后我们可以使用下面的一些命令查看程序的一些符号信息:
    在这里插入图片描述
  • 上图中红色是输入的命令,黄色是显示的类型。
  • 通过上述的命令练习,我们学会了如何在程序运行过程中查看符号的信息。

3 总结

  • 学会使用display进行断点处自动打印功能
  • 学会使用whatis与ptype进行查看符号的信息
  • 本文章参考狄泰软件学院相关课程 想学习的可以加狄泰软件学院群, 群聊号码:199546072

  • 学习探讨加个人(可以免费帮忙下载CSDN资源):

  • qq:1126137994

  • 微信:liu1126137994

  • 学习交流资源分享qq群:962535112

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

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

相关文章

MongoDB学习笔记(一) MongoDB介绍及安装

系列目录 MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系MongoDB学习笔记(五) MongoDB文件存取操作MongoDB…

前端学习(224):iconfont矢量库

矢量库 一、如何下载iconfont图标。 在iconfont-阿里巴巴矢量图标库中有多种图标供你选择。比如我们选择其中的一个作为示例。 鼠标悬浮上后会出现三种选择&#xff1a; 1.添加入库&#xff1a;功能和淘宝中的购物…

如何转载别人的博客

前言 对于喜欢逛CSDN的人来说&#xff0c;看别人的博客确实能够对自己有不小的提高&#xff0c;有时候看到特别好的博客想转载下载&#xff0c;但是不能一个字一个字的敲了&#xff0c;这时候我们就想快速转载别人的博客&#xff0c;把别人的博客移到自己的空间里面&#xff0c…

【软件开发底层知识修炼】二十 深入理解可执行程序的结构

上一篇文章记录了GDB调试从入门到熟练掌握的学习全过程。点击链接查看&#xff1a;【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录 还记得在以前的学习Binutils工具的时候&#xff0c;学习了很多工具来查看可执行程序的结构&#xff0c;那个时…

前端学习(225):尺寸属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS尺寸属性…

前端学习(226):定位使用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS定位<…

【数据结构与算法-java实现】三 Java数组类实现

上一篇文章学习了&#xff1a;最好、最坏、平均、均摊时间复杂度的计算与分析方法.本片文章学习数组这种结构。由于数组这种结构比较简单&#xff0c;本文直接简单介绍&#xff0c;然后给出两种实现数组类的Java代码:整形数组类与通用性的数组类 由于数组是相比于其他数据结构实…

解决VMware6.5 以上版本安装RHEL 5的自动安装的问题

解决VMware6.5 以上版本安装RHEL 5的自动安装的问题记得在学习 RHEL5的时候&#xff0c;教室里用的VMware5.5.3的版本&#xff0c;在教室里安装的时候是很正常的有步骤的那种&#xff0c;回到寝室后&#xff0c;用我的VMware6.5 安装的时候却发现&#xff0c;完全变成了自动安装…

【软件开发底层知识修炼】二十一 ABI-应用程序二进制接口一

前面学习了可执行程序的结构&#xff0c;点击链接查看上一篇文章&#xff1a;【软件开发底层知识修炼】二十 深入理解可执行程序的结构本篇文章开始新的篇章&#xff0c;学习应用程序的二进制接口-ABI。 文章目录1 什么是ABI&#xff08;Application Binary Interface&#xff…

【软件开发底层知识修炼】二十二 ABI-应用程序二进制接口 二

上一篇文章学习了ABI的相关内容&#xff0c;具体最后分析了不同ABI下结构体的对齐方式的不同。点击链接查看上一篇文章&#xff1a;【软件开发底层知识修炼】二十一 ABI-应用程序二进制接口一本篇文章继续学习ABI相关内容。是上一篇文章的补充&#xff0c;如果没有看过上一篇文…

asp.net中RegularExpressionValidator控件中正则表达式用法

验证数字&#xff1a; 只能输入1个数字 表达式 ^\d$ 描述 匹配一个数字 匹配的例子 0,1,2,3 不匹配的例子 只能输入n个数字 表达式 ^\d{n}$ 例如^\d{8}$ 描述 匹配8个数字 匹配的例子 12345678,22223334,12344321 不匹配的例子 只能输入至少n个数字 表达式 ^\d{n,}$ 例如^\d{8…

VS2017社区版30天到期无法使用的激活方法

VS2017社区版30天到期无法使用的激活方法VS2017社区版是免费的&#xff0c;但是第一次安装时&#xff0c;没有登录&#xff0c;导致只要30天的试用期&#xff0c;现在试用期结束&#xff0c;无法使用&#xff0c;本教程就是解决这个问题。我先在控制面板中将2017社区版软件卸载…

五分钟搞懂内网和外网之间的通信的原理

写的通熟易懂&#xff0c;特转过来备忘&#xff01;原创链接找不到了 对于初学者而已&#xff0c;我们学习的网络编程(如TCP,UDP编程)&#xff0c;我们通常都是在局域网内进行通信测试&#xff0c;有时候我们或者会想&#xff0c;我们现在写的内网网络数据和外网的网络数据有什…

【软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁

上两篇文章我们初步接触了ABI-应用程序二进制接口的概念&#xff0c;点击链接查看上一篇文章&#xff1a;【软件开发底层知识修炼】二十二 ABI-应用程序二进制接口 二。了解了为什么会有ABI的存在。本篇文章继续学习ABI 的内容。学习在ABI规范下&#xff0c;函数栈帧的结构与函…

【转】电脑GPS导航软件下载,教你把笔记本做成GPS

在开始之前&#xff0c;先说一下&#xff0c;相信很多朋友在谷哥搜索“电脑GPS导航软件”时&#xff0c;都很难找到真正的下载地址&#xff0c;多数是只能下载到灵图的破解文件&#xff0c;那么&#xff0c;本文不同&#xff0c;本文不但教你怎么打造电脑GPS&#xff0c;而且提…

【软件开发底层知识修炼】二十四 ABI之函数调用约定

上一篇文章学习了Linux环境下的函数栈帧的形成与摧毁。点击链接查看相关文章&#xff1a;软件开发底层知识修炼】二十三 ABI-应用程序二进制接口三之深入理解函数栈帧的形成与摧毁本篇文章继续学习ABI接口相关的内容。函数调用约定 文章目录1 函数参数如何入栈&#xff0c;返回…

【软件开发底层知识修炼】二十五 ABI之函数调用约定二之函数返回值为结构体时的约定

上一篇文章学习了几种函数调用约定的区别&#xff0c;点击链接查看上一篇文章&#xff1a;【软件开发底层知识修炼】二十四 ABI之函数调用约定本篇文章继续学习函数调用约定中&#xff0c;关于函数返回值的问题。当函数返回值为结构体时&#xff0c;函数返回值是如何来传给调用…

CSDN-Markdown-图片设置(大小,居中)

利用markdown在编写文档时插入图片是默认靠左&#xff0c;有些时候将图片设置为居中时可以更加的美观&#xff0c;这时就需要在图片的信息前边添加如下程序 <div aligncenter>![这里写图片描述](http:...如果想将图片位于右侧&#xff0c;只需要将center改为right<di…

CSDN中markdown字体颜色,大小,首行缩进,居中排布

一、下面是首行缩进的两种方法 1.这里实用空格去替代缩进的字符&#xff0c;下面讲的替代包括分号 2.把输入法由半角改为全角。 两次空格之后就能够有两个汉字的缩进。 半方大的空白用&ensp;或 全方大的空白用&emsp;或 不断行的空白格用 或 示例&#xff1a; 略略略…