1.gdb是什么
前面刚刚介绍了gcc,既然提到了gcc,下一个必须要提的是gdb。gdb同样是GNU出品的一款功能强大的工具,横扫linux世界。
gdb是一款调试工具,其功能之强大,深入使用之后你就会有感受。同gcc一样,随着gdb的使用你会有一种掌控一切的感觉。因为gdb更接近于底层,和操作系统的关系是那样近。其操作的方式是那样原始、野蛮,换句话说,更难但是学到的东西更多。
gdb是一款调试工具,用于软件代码调试和跟踪,主要是为了寻找软件bug和测试功能。通过使用gdb调试软件,能够使你深入到软件内部,进入到程序运行世界,同软件一起执行。等你调试过几次后,你就会对计算机顺序执行的理念深入感触。
当然在你编译软件的时候一定要加上-O0和-g参数,不然很多细节会被优化。
总而言之,gdb是用来调试代码,跟踪定位问题的。
2.gdb有什么用
gdb是提升代码能力最重要的工具。
gdb的作用其实就是调试代码的作用,调试代码对于一个软件工程师来说至关重要。提升自己工程能力分为两步:
- 阅读源码
- 调试代码
阅读源码就像是看书,更多的是理论或者抽象逻辑层面的。但代码要想落地,变得真实起来,或者你想对软件有一个感性的认识就必须进行调试。无论是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的基本操作,说的言简意赅,但基本操作都涵盖了,都是我实际的使用经验。更多的是需要你自己去调试,因为真正有价值的是你想了解的代码,而不是工具本身。工具会使用就好了。