审校 | 重楼
调试器对于查找程序中的错误必不可少。在编译代码之前,调试器做一些基础的工作,试图找到代码中存在的问题,通常提供比编译器本身更多的信息。作为一种开源生态系统,Linux拥有大量这种类型的应用程序,它们适用于几种不同的语言和处理架构。我们在本指南中将直接介绍Linux调试器。
1. GNU调试器(GDB)
GNU调试器又名GDB,是现代程序员可以使用的功能最强大的Linux调试器之一。它是一款强大的工具,拥有广泛的功能特征。GDB支持许多流行的编程语言,包括C、C++、Go和Rust。它还适用于许多不同的CPU体系结构,比如x86、x86-64、ARM、PowerPC、SPARC和MIPS。
使用以下命令安装GDB:
在基于Ubuntu/ Debian的发行版中:
sudo apt install gdb
在Fedora/RHEL发行版中:
sudo dnf install gdb
在基于Arch的发行版中:
sudo pacman -S gdb
只要您使用带有调试符号的GCC进行编译,就可以在程序运行时通过输入s逐步调试程序指令。输入r将通过调试器运行您的程序。要在程序加载的情况下启动GDB,只需在终端中输入gdb,后面跟程序路径。
进入调试器后,输入help将为您提供一个精心组织的目录,解释使用这个功能强大的调试器能执行的所有事情。
2. 数据显示调试器(DDD)
如果您不喜欢捣鼓命令,但仍然喜欢GDB所提供的功能特性,DDD为您提供了一个简单的图形化前端,它在点击式界面中提供了所有特性。它是典型的Linux调试器GUI。
用户界面可能看起来有点简陋,但其功能与任何其他调试器一样强大。这里的区别在于,您获得的是带有图形界面的GNU标志性调试器。
安装方法:
在基于Ubuntu/Debian的发行版中:
sudo apt install ddd
在Fedora/RHEL发行版中:
sudo dnf install ddd
在基于Arch的发行版中:
yay -S ddd
任何基于Arch的系统都必须使用AUR助手,因为DDD在其官方代码库中并不存在。或者,您可以在没有AUR助手的情况下在基于Arch的系统上安装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的默认调试器。LLDB的一些主要特性包括支持各种编译器集成和远程调试。它支持C语言(C、C++和Objective-C)。
对于那些已经熟悉基本GDB命令的人来说,LLDB会感觉很熟悉。输入run或r运行程序,输入step或s即可逐步执行子例程。
安装方法:
在基于Ubuntu/Debian的发行版中:
sudo apt install lldb
在Fedora/RHEL发行版中:
sudo dnf install lldb
在基于Arch的发行版中:
sudo pacman -S lldb
4. Delve
Delve是一个使用简单但功能丰富的Linux调试器,面向谷歌的Go编程语言。您可以使用它在运行时与程序进行交互,处理诸如Goroutine协程和堆栈之类的程序。调试器本身是用Go语言编写的,因此在与您测试的程序相同的环境中提供运行时。
Delve的工作原理与GDB和LLDB相同,只不过它有一系列独特的命令,与其他两个大不相同。一旦您进入Delve,只要输入help,它就会列出所有调试选项的完整列表。
与面向多种语言的比较通用的调试器不同,Delve提供了更多专门针对Go的命令,让您在应用程序运行时可以更详细地深入了解应用程序。
安装方法:
在基于Ubuntu/Debian的发行版中:
sudo apt install delve
在Fedora/RHEL发行版中:
sudo dnf install delve
在基于Arch的发行版中:
sudo pacman -S delve
5. Xdebug
虽然大多数人学习转储变量(这在PHP社区名为“dump & die”)以找出代码某个方面的问题,但有时您需要一些更实用的工具逐步完成例程的所有环节。Xdebug显然为满怀抱负的PHP程序员和经验丰富的PHP程序员提供了这种功能。
它是一个Linux调试器,可以逐行调试PHP代码,并准确显示处理网页时发生的情况。Xdebug还适用于几款IDE,包括VSCode。其他功能特性包括可靠的分析器、堆栈跟踪器和转储完整执行段的功能。
安装Xdebug:
在基于Ubuntu/Debian的发行版中:
sudo apt install php-xdebug
在Fedora/RHEL发行版中:
sudo dnf install php-xdebug
在基于Arch的发行版中:
sudo pacman -S xdebug
6. KDbg
KDbg是一款面向KDE桌面环境的GUI调试器。由于它像DDD一样作为GDB前端运行,因此您可以获得GDB的所有特性以及直观的用户界面。更有经验的程序员肯定会喜欢在逐步调试代码时一目了然地看清所有变量,还会喜欢一个完全专用的面板,显示每个CPU寄存器保存的内容。这类信息在本文介绍的任何其他调试器中都不容易看到。
正因为如此,对于传统的本地应用程序程序员来说,KDbg是一个出色的选择,适用于从刚开始学习的菜鸟和经验丰富的老手。
安装KDbg:
在基于Ubuntu/ Debian的发行版中:
sudo apt install kdbg
在Fedora/RHEL发行版中:
sudo dnf install kdbg
在基于Arch的发行版中:
sudo pacman -S kdbg
注意:如果您使用的是基于Ubuntu或Debian的发行版,并且在官方代码库中没有找到kdbg软件包,您必须输入以下内容来自行构建:
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是一个非常可靠的内存调试器,它为软件分析提供了许多额外的工具。它在Linux和Mac上都可以运行。此外,您可以将它用作框架,并创建像剖析器(Profiler)这样的动态分析工具。总的来说,Valgrind是专业人士的上佳选择,因为它拥有丰富的功能特性和众多工具,可以在程序运行时监视其内存。
Valgrind安装方法:
在基于Ubuntu/ Debian的发行版上:
sudo apt install valgrind
在Fedora/RHEL发行版上:
sudo dnf install valgrind
在基于Arch的发行版上:
sudo pacman -S valgrind
8. strace
strace是一个面向Unix的用户空间实用程序,它允许用户直接从终端跟踪系统调用和信号。
程序员可以使用它来处理转储堆栈跟踪、过滤系统调用、修改返回代码、提取文件描述符等操作。
更重要的是,strace允许您附加到运行中的程序。这使您可以深入了解在机器上运行的任何软件,以进一步了解可能导致崩溃的原因。
strace安装方法:
在基于Ubuntu/ debian的发行版中:
sudo apt install strace
在Fedora/RHEL发行版中:
sudo dnf install strace
在基于Arch的发行版中:
sudo pacman -S strace
借助这些工具,您可以用以前感觉无法企及的方式来调试、检查和分析代码。可能面临一段学习过程,但非常值得花时间钻研。如果您重视Linux编程,从长远来看,学习如何使用调试器将为您大大节省时间。
您已经拥有了最好的Linux调试器,现在是时候为开发人员和程序员寻找最好的Linux发行版了。
原文8 of the Best Linux Debuggers for Software Engineers,作者:Miguel Leiva-Gomez