GDB & LLDB调试器的区别是什么?我最近将Xcode版本从4.2升级到4.3,并开始收到警告,要将我的调试器从GDB升级到LLDB。
GDB & LLDB调试器的区别是什么?我最近将Xcode版本从4.2升级到4.3,并开始收到警告,要将我的调试器从GDB升级到LLDB。
LLDB是苹果正在转向的LLVM工具套件的一部分,包括Clang。它有许多改进的功能,包括性能提升。这里有一个适用于GDB用户的快速简介:http://lldb.llvm.org/tutorial.html
然而...
你可能想去开发者论坛developer.apple.com看看。目前有一些关于LLDB的问题(在XCode 4.3.1中)。其中一个令人不爽的问题是,当步进时查看ivars可能会显示错误的值,这已经得到了苹果相关人员的确认。
首先,什么是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反汇编器。无疑,GDB和LLDB都是优秀的调试器。 GDB是GNU项目中的一个调试器,用于与GNU编译器配合使用。 LLDB是LLVM项目中的一个调试器,用于与LLVM编译器配合使用。
大部分命令相同。
然而,LLDB和GDB是由不同开发人员开发的两个不同的调试器,因此它们的命令稍有不同。
以下两个列表清楚地显示了命令的差异:
链接网站上列出的主要差异摘要如下。
LLDB从Xcode IDE 5开始默认作为主要调试器完全集成。
从那时起,关于LLDB稳定性、性能问题和错误的投诉报告不断出现。然而,LLVM与LLDB项目在全球范围内已经得到了极大的改进和升级,成为核心开源项目之一。
因此,我认为至少在苹果开发环境中应该使用LLDB,因为LLDB已经取代了GDB,并且已经成为至少在苹果世界中的默认调试器。
(2016年9月底,集成了LLVM和LLDB的Xcode 8正式发布,意味着自从LLVM/LLDB成为Xcode的默认工具链以来已经过去了相当长的时间。)
但是,GDB作为一个经历了30多年验证和实战的调试器,仍然非常强大。
所以,在使用Clang时,我会使用LLDB,在使用GCC编译器时,我会使用GDB作为良好的组合或配对,因为LLDB基于LLVM,而GDB是GNU调试器。