面向軟件工程師的八個優(yōu)秀Linux調(diào)試器
譯文譯者 | 布加迪
審校 | 重樓
調(diào)試器對于查找程序中的錯誤必不可少。在編譯代碼之前,調(diào)試器做一些基礎(chǔ)的工作,試圖找到代碼中存在的問題,通常提供比編譯器本身更多的信息。作為一種開源生態(tài)系統(tǒng),Linux擁有大量這種類型的應(yīng)用程序,它們適用于幾種不同的語言和處理架構(gòu)。我們在本指南中將直接介紹Linux調(diào)試器。
1. GNU調(diào)試器(GDB)
GNU調(diào)試器又名GDB,是現(xiàn)代程序員可以使用的功能最強(qiáng)大的Linux調(diào)試器之一。它是一款強(qiáng)大的工具,擁有廣泛的功能特征。GDB支持許多流行的編程語言,包括C、C++、Go和Rust。它還適用于許多不同的CPU體系結(jié)構(gòu),比如x86、x86-64、ARM、PowerPC、SPARC和MIPS。
使用以下命令安裝GDB:
在基于Ubuntu/ Debian的發(fā)行版中:
sudo apt install gdb
在Fedora/RHEL發(fā)行版中:
sudo dnf install gdb
在基于Arch的發(fā)行版中:
sudo pacman -S gdb
只要您使用帶有調(diào)試符號的GCC進(jìn)行編譯,就可以在程序運(yùn)行時通過輸入s逐步調(diào)試程序指令。輸入r將通過調(diào)試器運(yùn)行您的程序。要在程序加載的情況下啟動GDB,只需在終端中輸入gdb,后面跟程序路徑。
進(jìn)入調(diào)試器后,輸入help將為您提供一個精心組織的目錄,解釋使用這個功能強(qiáng)大的調(diào)試器能執(zhí)行的所有事情。
2. 數(shù)據(jù)顯示調(diào)試器(DDD)
如果您不喜歡搗鼓命令,但仍然喜歡GDB所提供的功能特性,DDD為您提供了一個簡單的圖形化前端,它在點(diǎn)擊式界面中提供了所有特性。它是典型的Linux調(diào)試器GUI。
用戶界面可能看起來有點(diǎn)簡陋,但其功能與任何其他調(diào)試器一樣強(qiáng)大。這里的區(qū)別在于,您獲得的是帶有圖形界面的GNU標(biāo)志性調(diào)試器。
安裝方法:
在基于Ubuntu/Debian的發(fā)行版中:
sudo apt install ddd
在Fedora/RHEL發(fā)行版中:
sudo dnf install ddd
在基于Arch的發(fā)行版中:
yay -S ddd
任何基于Arch的系統(tǒng)都必須使用AUR助手,因?yàn)镈DD在其官方代碼庫中并不存在?;蛘?,您可以在沒有AUR助手的情況下在基于Arch的系統(tǒng)上安裝DDD:
sudo pacman -S --needed base-devel
git clone https://aur.archlinux.org/ddd.git
cd ddd
makepkg -si
3. LLDB
LLDB是LLVM項目的一部分。LLVM套件由于其高效的工作流程而越來越受歡迎。它也成為macOS的Xcode和Android Studio的默認(rèn)調(diào)試器。LLDB的一些主要特性包括支持各種編譯器集成和遠(yuǎn)程調(diào)試。它支持C語言(C、C++和Objective-C)。
對于那些已經(jīng)熟悉基本GDB命令的人來說,LLDB會感覺很熟悉。輸入run或r運(yùn)行程序,輸入step或s即可逐步執(zhí)行子例程。
安裝方法:
在基于Ubuntu/Debian的發(fā)行版中:
sudo apt install lldb
在Fedora/RHEL發(fā)行版中:
sudo dnf install lldb
在基于Arch的發(fā)行版中:
sudo pacman -S lldb
4. Delve
Delve是一個使用簡單但功能豐富的Linux調(diào)試器,面向谷歌的Go編程語言。您可以使用它在運(yùn)行時與程序進(jìn)行交互,處理諸如Goroutine協(xié)程和堆棧之類的程序。調(diào)試器本身是用Go語言編寫的,因此在與您測試的程序相同的環(huán)境中提供運(yùn)行時。
Delve的工作原理與GDB和LLDB相同,只不過它有一系列獨(dú)特的命令,與其他兩個大不相同。一旦您進(jìn)入Delve,只要輸入help,它就會列出所有調(diào)試選項的完整列表。
與面向多種語言的比較通用的調(diào)試器不同,Delve提供了更多專門針對Go的命令,讓您在應(yīng)用程序運(yùn)行時可以更詳細(xì)地深入了解應(yīng)用程序。
安裝方法:
在基于Ubuntu/Debian的發(fā)行版中:
sudo apt install delve
在Fedora/RHEL發(fā)行版中:
sudo dnf install delve
在基于Arch的發(fā)行版中:
sudo pacman -S delve
5. Xdebug
雖然大多數(shù)人學(xué)習(xí)轉(zhuǎn)儲變量(這在PHP社區(qū)名為“dump & die”)以找出代碼某個方面的問題,但有時您需要一些更實(shí)用的工具逐步完成例程的所有環(huán)節(jié)。Xdebug顯然為滿懷抱負(fù)的PHP程序員和經(jīng)驗(yàn)豐富的PHP程序員提供了這種功能。
它是一個Linux調(diào)試器,可以逐行調(diào)試PHP代碼,并準(zhǔn)確顯示處理網(wǎng)頁時發(fā)生的情況。Xdebug還適用于幾款I(lǐng)DE,包括VSCode。其他功能特性包括可靠的分析器、堆棧跟蹤器和轉(zhuǎn)儲完整執(zhí)行段的功能。
安裝Xdebug:
在基于Ubuntu/Debian的發(fā)行版中:
sudo apt install php-xdebug
在Fedora/RHEL發(fā)行版中:
sudo dnf install php-xdebug
在基于Arch的發(fā)行版中:
sudo pacman -S xdebug
6. KDbg
KDbg是一款面向KDE桌面環(huán)境的GUI調(diào)試器。由于它像DDD一樣作為GDB前端運(yùn)行,因此您可以獲得GDB的所有特性以及直觀的用戶界面。更有經(jīng)驗(yàn)的程序員肯定會喜歡在逐步調(diào)試代碼時一目了然地看清所有變量,還會喜歡一個完全專用的面板,顯示每個CPU寄存器保存的內(nèi)容。這類信息在本文介紹的任何其他調(diào)試器中都不容易看到。
正因?yàn)槿绱?,對于傳統(tǒng)的本地應(yīng)用程序程序員來說,KDbg是一個出色的選擇,適用于從剛開始學(xué)習(xí)的菜鳥和經(jīng)驗(yàn)豐富的老手。
安裝KDbg:
在基于Ubuntu/ Debian的發(fā)行版中:
sudo apt install kdbg
在Fedora/RHEL發(fā)行版中:
sudo dnf install kdbg
在基于Arch的發(fā)行版中:
sudo pacman -S kdbg
注意:如果您使用的是基于Ubuntu或Debian的發(fā)行版,并且在官方代碼庫中沒有找到kdbg軟件包,您必須輸入以下內(nèi)容來自行構(gòu)建:
sudo apt install build-essential cmake extra-cmake-modules qtbase5-dev libkf5i18n-dev libkf5iconthemes-dev libkf5xmlgui-dev
git clone -b maint https://github.com/j6t/kdbg.git
cd kdbg
cmake .
make
sudo make install
7. Valgrind
Valgrind是一個非常可靠的內(nèi)存調(diào)試器,它為軟件分析提供了許多額外的工具。它在Linux和Mac上都可以運(yùn)行。此外,您可以將它用作框架,并創(chuàng)建像剖析器(Profiler)這樣的動態(tài)分析工具。總的來說,Valgrind是專業(yè)人士的上佳選擇,因?yàn)樗?/span>擁有豐富的功能特性和眾多工具,可以在程序運(yùn)行時監(jiān)視其內(nèi)存。
Valgrind安裝方法:
在基于Ubuntu/ Debian的發(fā)行版上:
sudo apt install valgrind
在Fedora/RHEL發(fā)行版上:
sudo dnf install valgrind
在基于Arch的發(fā)行版上:
sudo pacman -S valgrind
8. strace
strace是一個面向Unix的用戶空間實(shí)用程序,它允許用戶直接從終端跟蹤系統(tǒng)調(diào)用和信號。
程序員可以使用它來處理轉(zhuǎn)儲堆棧跟蹤、過濾系統(tǒng)調(diào)用、修改返回代碼、提取文件描述符等操作。
更重要的是,strace允許您附加到運(yùn)行中的程序。這使您可以深入了解在機(jī)器上運(yùn)行的任何軟件,以進(jìn)一步了解可能導(dǎo)致崩潰的原因。
strace安裝方法:
在基于Ubuntu/ debian的發(fā)行版中:
sudo apt install strace
在Fedora/RHEL發(fā)行版中:
sudo dnf install strace
在基于Arch的發(fā)行版中:
sudo pacman -S strace
借助這些工具,您可以用以前感覺無法企及的方式來調(diào)試、檢查和分析代碼??赡?/span>面臨一段學(xué)習(xí)過程,但非常值得花時間鉆研。如果您重視Linux編程,從長遠(yuǎn)來看,學(xué)習(xí)如何使用調(diào)試器將為您大大節(jié)省時間。
您已經(jīng)擁有了最好的Linux調(diào)試器,現(xiàn)在是時候?yàn)殚_發(fā)人員和程序員尋找最好的Linux發(fā)行版了。
原文標(biāo)題:8 of the Best Linux Debuggers for Software Engineers,作者:Miguel Leiva-Gomez