從事 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
- 熟悉一個“高質量”軟體的開發過程
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- Linux核心使用gdb除錯Linux除錯
- 【Linux工具】-yum/gdb使用教程!Linux
- 2021年學習Linux技術可以從事哪些工作?Linux發展前景Linux
- 學Java開發可以從事什麼工作?Java
- 你一定要知道imToken錢包的那些事
- 視訊廣告,你一定要知道的事
- 學Python一定要掌握Linux系統嗎?PythonLinux
- Linux中使用GDB除錯程式Linux除錯
- Linux程式設計之gdb(二)Linux程式設計
- 嵌入式開發可以從事哪些崗位?
- Linux C++ 開發7 - GDB常用命令彙總(你想了解的都在這)LinuxC++
- 開發一款記事本
- 運維一定要懂的Linux高階命令運維Linux
- 虛擬機器一定要安裝Linux嗎?虛擬機Linux
- 熟悉常用的Linux操作和Hadoop操作LinuxHadoop
- 從原始碼安裝GDB-8.1原始碼
- Linux gdb偵錯程式用法全面解析Linux
- Linux—gdb除錯簡單實現Linux除錯
- Linux就業前景如何?學完Linux從事哪些工作?Linux就業
- 從頭開發一個Flutter外掛(一)開發流程Flutter
- 從業5年,教你學習Linux開發Linux
- 程式設計師為什麼一定要用Linux?程式設計師Linux
- 程式設計師為什麼一定要用 Linux ?程式設計師Linux
- 為什麼程式設計師一定要學Linux程式設計師Linux
- 會Linux運維可以從事什麼工作?Linux入門Linux運維
- GDB除錯-從入門到實踐除錯
- 【Linux工具】yum和gdb詳細使用教程。Linux
- linux下gdb如何處理coredump錯誤Linux
- 從零開始開發一個 WebpackWeb
- 邦芒忠告:跳槽路上一定要拒絕的7件事
- 區塊鏈是不是一定要發幣區塊鏈
- 從零開始製作一個linux iso映象Linux
- 計算機那些事(2)——從開機到 Linux 啟動過程詳解計算機Linux
- 如何從0-1瞭解 熟悉 精通gitlabGitlab
- 從事Web開發工作,學python和Java哪個更合適?WebPythonJava