Skip to main content

Qt Creator与LLDB

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而努力。

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.