從事 Linux 開發一定要熟悉 GDB
本文選自 | 《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 除錯指南》,希望能幫助需要的朋友找到自己的鑰匙。
▼掃碼解鎖 GDB
這個圖文課程共 19 篇,內容由淺至深,詳細地講解了除錯的基本原理和實際專案除錯中各種 GDB 命令的靈活使用。
GitChat 作者
范蠡:資深開發工程師,擔任過 C++ 客戶端和伺服器端開發主程,先後做過網際網路金融交易系統、即時通訊、遊戲伺服器、音視訊直播伺服器等專案,目前在某大型網際網路公司任開發經理一職。
適宜人群
希望學習 Linux C/C++ 開發和系統原理的讀者
希望提高除錯和排障能力的 C/C++ 開發人員
希望學習 Redis 網路通訊模組設計思想的讀者
希望整體把握開源 C/C++ 專案技巧的讀者
點選閱讀原文,免費試讀了解
相關文章
- Taro 小程式開發大型實戰(一):熟悉的 React,熟悉的 HooksReactHook
- Android開發入門之熟悉開發環境Android開發環境
- 熟悉一個“高質量”軟體的開發過程
- 程式設計師一定要投資的那些事程式設計師
- 如何熟悉一個開源專案?
- 學Java開發可以從事什麼工作?Java
- 您適合從事web前端開發嗎?Web前端
- 【軟體開發工具——陌生的熟悉人】
- iptables 從放棄 到 熟悉
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- 嵌入式開發可以從事哪些崗位?
- 開發一款記事本
- 開發人員一定要加入收藏夾的網站網站
- 前端工程師一定要做的6件事前端工程師
- 程式設計師一定要知道的事都有哪些?程式設計師
- linux 下GDB除錯Linux除錯
- 從頭開發一個Flutter外掛(一)開發流程Flutter
- 從零開始開發一個 WebpackWeb
- Linux下C開發工具介紹 GCC gdb xxgdb calls calltree cproto indent gprof (轉)LinuxGC
- 從原始碼安裝GDB-8.1原始碼
- Linux核心使用gdb除錯Linux除錯
- 【Linux工具】-yum/gdb使用教程!Linux
- 區塊鏈是不是一定要發幣區塊鏈
- Ruby開發人員應該熟悉的10個工具
- 關於GCD開發的一些事GC
- Linux C++ 開發7 - GDB常用命令彙總(你想了解的都在這)LinuxC++
- 定位一定要清晰,目標一定要明確~~~
- 學Python一定要掌握Linux系統嗎?PythonLinux
- 運維一定要懂的Linux高階命令運維Linux
- 虛擬機器一定要安裝Linux嗎?虛擬機Linux
- GDB除錯-從入門到實踐除錯
- HTML5開發都能幹什麼?從事哪些崗位?HTML
- 跳槽季:分享從事C#開發人員面試經驗C#面試
- 手機直播平臺開發一定要懂的知識:編解碼
- 學習 VR 開發之前,這 7 個容易混淆的概念一定要理清VR
- Linux程式設計之gdb(二)Linux程式設計
- Linux中使用GDB除錯程式Linux除錯
- linux下gdb單步除錯Linux除錯