为 QUuid 制作一个 GDB 调试助手 class

Making a GDB debugging helper for the QUuid class

我在我的项目中使用 QUuid class 并且为了测试和调试目的,如果能以人类可读的形式而不是低级形式看到 QUuid 对象,那将是非常好的.

出于某种原因,Qt 的人员没有包含这种类型的转储方法,因此我尝试按照 this documentation and this 指南自己创建一个。

我对 Python 不熟悉,所以很遗憾,我无法得到一些东西 运行。有人能帮我创建这样一个函数,它只在 Qt Creator 的值列中显示 QUuid::toString() 的输出吗?

编辑: Mitko 的解决方案非常有效。我对其进行了一些扩展,以便在需要时仍然可以阅读详细信息:

from dumper import *
import gdb

def qdump__QUuid(d, value):
    this_ = d.makeExpression(value)
    finalValue = gdb.parse_and_eval("%s.toString()" % (this_))
    d.putStringValue(finalValue)
    d.putNumChild(4)
    if d.isExpanded():
        with Children(d):
            d.putSubItem("data1", value["data1"])
            d.putSubItem("data2", value["data2"])
            d.putSubItem("data3", value["data3"])
            d.putSubItem("data4", value["data4"])

下面的 python 脚本应该可以完成这项工作:

from dumper import *
import gdb

def qdump__QUuid(d, value):
    this = d.makeExpression(value)
    stringValue = gdb.parse_and_eval("%s.toString()" % this)

    d.putStringValue(stringValue)
    d.putNumChild(0)

将它与 Qt Creator 一起使用的最简单方法是将这些行粘贴到 <Qt-Creator-Install-Dir>/share/qtcreator/debugger/personaltypes.py 文件的末尾。在这种情况下,您可以跳过第一行,因为它已经在文件中。

由于更新 Qt Creator 时 personaltypes.py 文件被覆盖,您可能希望将上面的脚本放在它自己的文件中。在这种情况下,您需要配置 Qt Creator 以使用您的文件。您可以转到 工具 > 选项... > 调试器 > GDB > 额外调试助手 > 浏览 并选择您的文件。

注:

  1. 此脚本只能在 Qt Creator 中运行,因为我们使用其特定的转储程序(例如 putStringValue)。
  2. 我们调用 QUuid::toString() 创建一个 QString 对象。我不确定 gdb 和 python 是如何处理这个问题的,以及是否需要清理它以避免内存泄漏。这对于调试可能不是什么大问题,但需要注意。