前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码写得"差"就怪 GDB !

代码写得"差"就怪 GDB !

作者头像
CSDN技术头条
发布2019-11-19 15:50:22
7150
发布2019-11-19 15:50:22
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条
本文选自 | 《Linux GDB 调试指南》

作者 | 范蠡

责编 | Linse

今日调侃:GDB 不难学,还挺能锻炼打字速度的,特别是写 C++ 的时候

我从学生时代到进入软件开发这个行业,不知不觉已经十余年了,各种项目使用的服务器操作系统都是 Linux,开发语言是 C/C++。

正如从事 Windows C/C++ 开发的一定要熟悉 Visual Studio、从事 Java 开发的要熟悉 Eclipse 或 IntelliJ IDEA、从事 Android 开发的要熟悉 Android Studio、从事 iOS 开发的要熟悉 XCode 一样,从事 Linux 开发的要熟悉 GDB。

GDB 有多重要?分享我的经历侧面回答一下这个问题。

01

熟练使用 GDB 是 Linux C/C++ 开发人员的基本素养

我之前有份后台开发的工作,部门有个不成文的规定:即使很明确的程序,每个分支必须使用 GDB 调试器去追踪一下程序,看看执行过程中的各种中间状态是否符合预期。

很多人想当然地觉得代码就会按预期的流程去执行,但是实际上一到生产环境总会出现这样那样的问题,这是很多 Bug 产生的原因。在调试的过程中,能够学到很多可能想不到的知识。

我开始是做 Windows C/C++ 开发的,后来转做 Linux C/C++ 开发,刚开始对 Linux 环境下没有图形化的可视化界面很不习惯,因此很多简单的代码段也就不愿意去调试,后来系统事故频发,造成了一些不好的影响,慢慢地意识到调试的重要性。

后来,我做了技术管理者,每次面试技术候选人,我会问他熟悉哪些开发工具。有些面试者对各种开发工具都不熟悉,我猜想这类应聘者应该是基本“不写代码”或者“不会写代码”的,面试结果可想而知。

“工欲善其事、必先利其器”,作为一名合格的软件开发者,至少得熟悉一种软件开发工具和调试器,而对于 Linux C/C++ 后台开发,舍 GDB 其谁?

虽然 Linux 系统下大家编写 C/C++ 代码的 IDE 可以自由选择,但是调试生成的 C/C++ 程序一定是直接或者间接使用 GDB。

可以毫不夸张地说,我做的所有项目的开发和调试包括故障排查都是利用 GDB 完成的。调试是开发流程中一个非常重要的环节,对于从事 Linux C/C++ 的开发人员,熟练使用 GDB 调试是一项基本要求。

02

熟练使用 GDB 是学习优秀开源项目的一把钥匙

一些初中级开发者可能想通过阅读一些优秀的开源项目来提高自己的编码水平,但是只阅读代码,不容易找到要点,或者会误解程序的执行逻辑,最终迷失方向。

如果能实际利用调试器去把某个开源项目调试一遍,学习效果才能更好。站在 Linux C/C++ 后台开发的角度来说,学会了 GDB 调试,就可以对各种 C/C++ 开源项目(如 Redis、Apache、Nginx 等)游刃有余

简而言之,GDB 调试是学习这些优秀开源项目的一把钥匙。

另外,由于 C++ 这门语言多态特性的存在,我们看到的代码执行脉络和实际中的执行流程可能会不一样,特别容易搞错。

我觉得最好的学习方法就是调试这些开源软件,无论多么复杂的程序,只要可以调试,就总可以搞得明明白白的。而一些程序的细节,我们可以通过修改源码调试观察,最终把原理搞得透彻。

03 我的 GDB 学习轨迹

刚开始,我通过网络资料学会了一些简单的 GDB 命令,这时候我在工作中会刻意找一些 demo 程序去调试。在调试的过程中,遇到了一些需要重复操作才能触发的断点,在厌倦反复手工操作以后,学会了临时断点、条件断点和硬件断点的添加方法。

后来在跟多线程程序斗智斗勇的过程中,学会了如何在各个线程之间切换和查看当前线程调用堆栈。办法总比困难多,在坚持之后,我发现已经找到了能够搞明白任何 Linux C/C++ 程序的钥匙。

而这把钥匙是很多人苦苦寻找的。

我把找到这把钥匙的经验汇集成册,在 GitChat 平台上发布了《Linux GDB 调试指南》,希望能帮助需要的朋友找到自己的钥匙。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitChat精品课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 03 我的 GDB 学习轨迹
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档