GDB与LLDB调试器的比较

69

GDB & LLDB调试器的区别是什么?我最近将Xcode版本从4.2升级到4.3,并开始收到警告,要将我的调试器从GDB升级到LLDB。


一个主要的区别让我不敢改变,那就是GDB在打印大型数组时非常聪明,可以处理很多重复内容,而LLDB则会使垂直滚动条失效。 - Marcelo Cantos
1
我喜欢LLDB的原因是它的语法更加结构化。GDB则稍微自由一些。 - Jay Q.
2个回答

59

LLDB是苹果正在转向的LLVM工具套件的一部分,包括Clang。它有许多改进的功能,包括性能提升。这里有一个适用于GDB用户的快速简介:http://lldb.llvm.org/tutorial.html

然而...

你可能想去开发者论坛developer.apple.com看看。目前有一些关于LLDB的问题(在XCode 4.3.1中)。其中一个令人不爽的问题是,当步进时查看ivars可能会显示错误的值,这已经得到了苹果相关人员的确认。


9
那个错误是为什么你会发现我目前正在使用GDB :) - Richard J. Ross III
谢谢提到这个问题!我对LLDB调试器显示的内容感到非常困惑。它几乎是不可能的。GDB确实更好用。 - Martijn Courteaux
你好。现在已经过去一年了。LLDB还没有变得更好吗? - Saturn
1
LLDB已经变得更好了。一旦[删除]5发布,最好开始过渡,因为GDB将永远消失。 - infinitetape

44

1. 通过定义的差异

首先,什么是GDB

GDB,GNU项目调试器,允许您在另一个程序执行时查看其内部运行情况,或者在程序崩溃时查看其崩溃瞬间的状态。
GDB主页

GNU调试器(GDB)是一个可移植的调试器,可以在许多类Unix系统上运行,并支持多种编程语言,包括Ada、汇编、C、C++、D、Fortran、Go、Objective-C、OpenCL C、Modula-2、Pascal、Rust以及部分其他语言。
维基百科

其次,什么是LLDB

LLDB是一款下一代高性能调试器。它作为一组可重用的组件构建,充分利用了LLVM项目中现有的库,如Clang表达式解析器和LLVM反汇编器。
LLDB是macOS上Xcode的默认调试器,支持在桌面和iOS设备以及模拟器上调试C、Objective-C和C++代码。 LLDB主页 LLDB是苹果公司从头开始开发的GDB替代品,与LLVM编译器密切配合,为您提供先进的调试功能,包括流程控制和数据检查。从Xcode 5开始,所有新的和现有的开发项目都会自动重新配置为使用LLDB。标准的LLDB安装为您提供了一套广泛的命令,设计成与熟悉的GDB命令兼容。除了使用标准配置外,您还可以轻松定制LLDB以满足您的需求。 苹果文档存档

无疑,GDBLLDB都是优秀的调试器。 GDBGNU项目中的一个调试器,用于与GNU编译器配合使用。 LLDBLLVM项目中的一个调试器,用于与LLVM编译器配合使用。

2. 通过调试器命令使用的差异

大部分命令相同。
然而,LLDBGDB是由不同开发人员开发的两个不同的调试器,因此它们的命令稍有不同。

以下两个列表清楚地显示了命令的差异:

链接网站上列出的主要差异摘要如下。

Execution command difference between GDB and LLDB Break-Point command difference between GDB and LLDB Examining variable command difference between GDB and LLDB Examining thread state command difference between GDB and LLDB

3. 个人观点

LLDBXcode IDE 5开始默认作为主要调试器完全集成。
从那时起,关于LLDB稳定性、性能问题和错误的投诉报告不断出现。然而,LLVMLLDB项目在全球范围内已经得到了极大的改进和升级,成为核心开源项目之一。

因此,我认为至少在苹果开发环境中应该使用LLDB,因为LLDB已经取代了GDB,并且已经成为至少在苹果世界中的默认调试器。
(2016年9月底,集成了LLVM和LLDB的Xcode 8正式发布,意味着自从LLVM/LLDB成为Xcode的默认工具链以来已经过去了相当长的时间。)

但是,GDB作为一个经历了30多年验证和实战的调试器,仍然非常强大。

所以,在使用Clang时,我会使用LLDB,在使用GCC编译器时,我会使用GDB作为良好的组合或配对,因为LLDB基于LLVM,而GDB是GNU调试器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接