64

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

4

2 回答 2

56

LLDB 是 Apple 正在迁移到的 LLVM 工具套件的一部分,包括 Clang。有大量改进的功能,包括改进的性能。这里有一个 GDB 用户的快速介绍:http: //lldb.llvm.org/tutorial.html

然而...

您可能想访问 developer.apple.com 上的论坛。目前(在 XCode 4.3.1 中)关于 LLDB 的问题存在一些争议。Apple 人员已经确认的一个令人讨厌的问题是,在步进时查看 ivars 可能会显示错误的值。

于 2012-03-14T20:06:36.153 回答
36

一、定义不同

一、什么是GDB?

“GDB 是 GNU 软件系统的标准调试器”
GNU 调试器,通常简称为 GDB,并将 gdb 命名为可执行文件,是 GNU 操作系统的标准调试器。但是,它的使用并不仅限于 GNU 操作系统;它是一个可移植的调试器,可在许多类 Unix 系统上运行,并适用于许多编程语言,包括 Ada、C、C++、Objective-C、Free Pascal、Fortran、Java 1和部分其他语言。2

(来自维基百科的引用)

二、什么是LLDB?

“LLDB 是作为一组可重用组件构建的调试器,它高度利用较大 LLVM 项目中的现有库,例如 Clang 表达式解析器和 LLVM 反汇编器
。LLDB 是 Apple 对 GDB 的“从头开始”替代品,在密切合作下开发使用 LLVM 编译器为您带来最先进的调试,并在流控制和数据检查方面具有广泛的功能。从 Xcode 5 开始,所有新的和预先存在的开发项目都会自动重新配置为使用 LLDB。标准的 LLDB 安装为您提供广泛的命令集,旨在与熟悉的 GDB 命令兼容。除了使用标准配置外,您还可以轻松自定义 LLDB 以满足您的需求。

(Apple 官方网站引用)
/* 我试图找到实际/实用的数据来证明这个说法:在调试大型程序时,LLDB 已经比 GDB 快得多。)但是,我找不到它。如果有人有这个相关数据,请编辑这篇文章。*/

毫无疑问,GDB 和 LLDB 都是出色的调试器。
GDB 是为与 GNU 编译器一起工作而创建的 GNU 项目的调试器部分。
LLDB 是为与 LLVM 编译器一起工作而创建的 LLVM 项目的调试器部分。

2.根据调试器命令用法的不同

大多数命令是相同的。
但是,lldb 和 gdb,两个不同的调试器是由不同的开发人员开发的,因此有一些不同的命令。

这是下面比较这两个调试器命令差异的好链接。
让我链接下面的详细信息: https ://developer.apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-command-examples.html

http://lldb.llvm.org/lldb-gdb.html

这清楚地表明并组织了命令的差异。

如果该站点无法再访问,我总结了以下命令与链接站点的主要区别。

GDB和LLDB的执行命令区别 GDB和LLDB断点命令的区别 检查 GDB 和 LLDB 之间的变量命令差异 检查 GDB 和 LLDB 之间的线程状态命令差异

3. 个人意见

LLDB 已经从 Xcode IDE 5 完全集成默认作为主要调试器。
从那时起,就出现了一些关于 LLDB 稳定性、性能问题和错误的投诉报告。
然而,作为全球核心开源项目之一的 LLVM 和 LLDB 项目一直在进行着令人难以置信的改进和升级。
所以,我认为,至少,LLDB 应该用于 Apple 开发环境,因为 LLDB 抢走了 GDB 的地位,并且至少在 Apple 世界中已经是主要的默认调试器。
(2016 年 9 月下旬,集成 LLVM 和 LLDB 的 Xcode 8 正式发布,这意味着从 LLVM/LLDB 成为 Xcode 的默认工具链已经过去了相当长的一段时间。)
但是,我们都知道 GDB 已经经过 30 多年的历史和强大的验证和久经考验的调试器,这太棒了。

所以,我想说...<br> 我想在使用 clang 的同时使用 lldb,在使用 gcc 编译器的同时使用 gdb 作为良好的组合或配对,因为 lldb 是基于 llvm,而 gdb 是一个 GNU 调试器。

我希望它对你有帮助。

谢谢。

于 2016-09-27T06:28:10.830 回答