Back to Blog home

Qt Creator与LLDB

Published on Friday November 22, 2013 by Yanghe Liu in C++ Qt QtCreator Mac OS X qt-labs-chinese | Comments

原文链接:André Pönitz - Qt Creator and LLDB

Mac用户应该知道,我们曾经支持过还在煎熬中的LLDB调试器。当时我们针对Mac平台,基于LLDB库所提供的接口做了一些探索性工作。结果是Mac上支持的一般般,而在其它平台不能编译,因为已经存在的GDB方案还处于可以工作的状态,所以被搁置了。

时光飞逝,我们的处境也发生了变化。由于iOS版Qt的发展和苹果对GDB支持的怠慢,很明显我们早晚要以LLDB作为Qt Creator的调试后端。因此我们在2.8的发行周期中重新启动了对LLDB的支持工作。这次我们用的是LLDB的Python接口。

很明显,用Python的决定是一种折衷。缺点主要是解释器这种方式所引起的性能下降;而优点是易于软件发行(通常直接用系统上默认的调试器,要比另带一个更简单),我们希望能够直接重用Qt Creator最有价值的东西——“倾卸装置(dumper)”(Qt Creator术语),也就是“优质打印机(pretty printer)”(GDB术语),或者说是“数据可视化工具(data visualizer)”(LLDB术语)。

那么即将到来的Qt Creator 3.0和LLDB有哪些功能可用呢?

目前我们的重点是Mac上与Xcode 5命令行工具一同发行的“LLDB 300.2”。它很可能是接下来几个月中安装最多的版本,同时我们打算在iOS版Qt中也使用它。其它版本虽然可以经过一些改动运行,但目前并没有测试过。

简单的断点设置、运行、中断都可以工作。步进,尤其是内联函数附近的步进,其内部原理与GDB的原理完全不同,同时由于这部分功能由调试器后端实现,Qt Creator并不会过多参与(而且或许不该参与)。目前的情况就像GDB与CDB之间的情况,所以我相信一个真正有跨平台背景的人应该能够接受。

基本数据类型和C风格结构体的显示工作正常。同时,倾卸装置(dumper)测试样例266例中的184例已经通过,这意味着大多数重要的类型都已经实现。剩余的失败样例相对较为分散。其中有些是因为缺少实现,有些是因为其输出与其它调试器后端略有不同。其中有至少一个看起来像是Clang产生的不完整调试信息,还有几个是因为LLDB的类型查找表。但是没有哪个特别严重。

还有一些正常工作的部分比较分散。反编译视图(包括步进)、寄存器显示以及表达式求值都可以工作,当然还有可以逐帧切换的栈视图等等。

哪些不工作?

基本上,“其它的”都不工作。有些视图需要额外计算出来的信息(Modules->Update Module List),有些则完全没有处理(快照、源文件等等)。

那么以后呢?

当然是“搞定它们”。目前有很多因缺少整合而产生的问题,即使有些修起来很简单。有些问题是因为在性能方面还有进步的空间,目前来说不够健壮。现在也不是不能用,但和Linux上的GDB没法相提并论。以过往的经验来说,在未来几个小发行版本中,LLDB将会成长得更好。

现在我们的情况是,为了跟上变化,还有很多东西需要更新。多亏用了SWIG,目前可用的接口相对比较完整。简单来说,目前我们的问题不是“如何才能找全这些信息”,而是“哪些函数最好、最快或者推荐使用”。(如果有LLDB开发者读到这,我想说:非常谢谢你们,脱帽致敬!)

总的来说,我对我们现在的路很有信心,其中包括尽快脱离只支持Mac的决定。Qt Creator 3.0将在Mac平台同时支持GDB和LLDB作为调试器后端。它们都还不完美,如果您想帮忙改进,在缺陷追踪中提出缺陷,或者贡献代码,为LLDB而努力。

Subscribe to Our Blog

Stay up to date with the latest marketing, sales and service tips and news.