1.gdb是什么

前面刚刚介绍了gcc,既然提到了gcc,下一个必须要提的是gdb。gdb同样是GNU出品的一款功能强大的工具,横扫linux世界。

gdb是一款调试工具,其功能之强大,深入使用之后你就会有感受。同gcc一样,随着gdb的使用你会有一种掌控一切的感觉。因为gdb更接近于底层,和操作系统的关系是那样近。其操作的方式是那样原始、野蛮,换句话说,更难但是学到的东西更多。

gdb是一款调试工具,用于软件代码调试和跟踪,主要是为了寻找软件bug和测试功能。通过使用gdb调试软件,能够使你深入到软件内部,进入到程序运行世界,同软件一起执行。等你调试过几次后,你就会对计算机顺序执行的理念深入感触。

当然在你编译软件的时候一定要加上-O0和-g参数,不然很多细节会被优化。

总而言之,gdb是用来调试代码,跟踪定位问题的。

2.gdb有什么用

gdb是提升代码能力最重要的工具。

gdb的作用其实就是调试代码的作用,调试代码对于一个软件工程师来说至关重要。提升自己工程能力分为两步:

  1. 阅读源码
  2. 调试代码

阅读源码就像是看书,更多的是理论或者抽象逻辑层面的。但代码要想落地,变得真实起来,或者你想对软件有一个感性的认识就必须进行调试。无论是python、java也好,调试都是至关重要的。但那些语言和c比起来,或者说那些语言的调试工具和gdb比起来,gdb调试的c代码更加接近底层,更加接近操作系统,更加接近真实的软件世界。

目前的软件世界还是构建在c上的,掌握了调试C语言代码你才能真正了解这个软件世界。(我是这样想的,也是这样做的。)正是由于C语言的特殊性以及调试代码的重要性,才越发凸显出gdb的重要性来。gdb在一个软件工程师的技术晋升之路上发挥着难以替代的作用。

以下提到的操作都是gdb的基本操作,真的值得你花几分钟大致了解一下。然后再自己找个程序亲自调试一下,哪怕是最简单的也好。编程从来都是会了1,然后循坏百、千、万、亿。

3.gdb基本操作

  • 基本操作使用gdb启动调试
programgdb program

添加断点打印变量内容跟踪程序执行流程,了解程序逻辑

b main #在main函数入口加地址b main.c:3 #在main.c文件第3行加断点b *0x0000987c #在地址0x0000987c处加断点r #启动程序c #继续运行直到遇到断点n #单步运行bt #查看调用堆栈i  #列出相关信息i locals #列出所有局部变量i shared #列出所有共享库i thread #列出所有线程p index #打印变量index的值
  • 调试可执行文件
gdb program
  • 如果有参数使用
set args arg1 arg2
  • 调试进程,调试进程要先找到进程号并且进程要包含符号表
ps -ef |grep program #找到进程号gdb -q attach pid
  • 调试动态库

调试动态库要先写测试用例,然后就跟调试可执行文件一样了。

  • 调试核心转储文件
gdb coredumpfile1

以上就是gdb的基本操作,说的言简意赅,但基本操作都涵盖了,都是我实际的使用经验。更多的是需要你自己去调试,因为真正有价值的是你想了解的代码,而不是工具本身。工具会使用就好了。

gdb 查看结构体地址内容_程序员的术与道:术——gdb基本操作相关推荐

  1. linux查看内存条pn,实验:使用GDB查看结构体在内存中的存储方式

    结构体在内存中的表示形式是怎么样的? 结构体在内存中和普通变量存储没有太大的区别. 首先我们看看,计算机如何读取普通变量:   普通变量例如int是占据4个字节,计算机读内存的时候会从起始地址开始读, ...

  2. GDB 格式化结构体输出

    set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址.系统默认为打开的, show print address ...

  3. linux gdb 格式化结构体输出

    set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址.系统默认为打开的, show print address ...

  4. C++ 利用结构体数组编写一个程序,对10名小学生的信息进行管理,学生结构体的成员包括姓名、学号、年龄、语文成绩、数学成绩、英语成绩、三门课总分等

    利用结构体数组编写一个程序,对10名小学生的信息进行管理,学生结构体的成员包括姓名.学号.年龄.语文成绩.数学成绩.英语成绩.三门课总分等,具体要求如下: (1)要求通过键盘完成各位小学生的信息录入( ...

  5. python后端开发学路线_【后端开发】Python要学哪些内容?Python程序员学习路线图...

    很多零基础入门学习python不知道学习什么?也不知道Python要学哪些内容?下ki4网为您总结一下Python程序员学习路线图. python的应用范围是很广泛的,例如一些网络的爬虫,和web的开 ...

  6. 【源码+演示】高考加油!HTML+CSS特效文字祝福_程序员祝福高考学子旗开得胜!

    又是一年盛夏至,愿高三学子高中毕业日,即是高中名校时! 本篇为大家带来3款HTML+CSS制作出的小项目,为高考学子加油助威,愿他们旗开得胜,金榜题名![源码+演示]高考加油!HTML+CSS特效文字 ...

  7. webservice入参是一个对象_程序员技术精进:面向对象与服务的分析与设计

    面向对象分析与设计 面向对象分析与设计是指根据面向对象方法学对软件系统进行分析与设计.在面向对象分析与设计的定义中有三个关键词:面向对象.分析.设计.所以,为了更好地理解面向对象分析与设计的作用,我们 ...

  8. 【读书笔记】 我编程_我快乐——程序员职业规划之道

    快要放假了,最后坚挺的时刻,读本书吧.<我编程,我快乐 --程序员职业规划之道>. 1, 当你开始做一个程序的时候,或许手头上有一个从网上复制的示例程序,看上去这个程序可以使用.为了满足你 ...

  9. 《程序员的修炼之道——从小工到专家》读书笔记

    概览 最近读了<程序员的修炼之道--从小工到专家>这本书,感觉这本书又是属于开发进阶的必读的一本著作,而且我觉得一遍甚至还只是入门,这是一本值得都第二遍的书.再次推荐给大家,没看过的都去看 ...

最新文章

  1. IOS、java支持DES加密
  2. idea git 使用
  3. CISCO交换机配置命令大全
  4. java8 :: 用法 (JDK8 双冒号用法)
  5. math for programmers(转载)
  6. python linux脚本加密解密,用Python解密Chrome Linux BLOB加密的cookie
  7. HTML5与传统HTML的区别
  8. W25Q64内部结构
  9. HDU 1277全文检索(字典树)
  10. bzoj4816: [Sdoi2017]数字表格
  11. 虚拟服务器欠费是什么原因,辟谣:Elysium解释近期服务器崩溃的原因 非服务器欠费 而是闪电...
  12. 关于SQL sever中创建表时出现“对象名无效”的情况
  13. 《你的降落伞是什么颜色》
  14. 赵小楼《天道》《遥远的救世主》深度解析(111)人是需要社会认同感和存在感的
  15. 成为REAL程序员的终极指南
  16. Navicat Premium安装教程(激活)
  17. 如何用互联网技术和思维,优化传统商业的价值链,注入新的商业智慧
  18. 开源项目【LikeCloudMusic 云音】仿网易云音乐
  19. Hadoop海量级分布式存储
  20. Final Cut Pro X中如何安裝模板插件(fcpx插件模板安装)

热门文章

  1. Scala里的控制台输出print实现原理
  2. Java和ABAP里的外部类和内部类
  3. Hybris service layer和SAP CRM WebClient UI架构的横向比较
  4. SAP Hybris和Netweaver的集群模式以及集群模式下工作需要解决的问题
  5. CRM Fiori Simulation pipeline应用点了bubble控件的实现
  6. SAP CRM Product workflow debug
  7. One order time zone
  8. middleware generic错误处理机制
  9. Excel 2010 下拉菜单的制作方法
  10. 研究SAP service order status存储字段