为QUuid类制作GDB调试帮助程序

Making a GDB debugging helper for the QUuid class

本文关键字:GDB 调试 帮助程序 QUuid      更新时间:2023-10-16

我在我的项目中使用QUuid类,为了测试和调试目的,很高兴看到QUuid对象是人类可读的形式,而不是它们的低级形式。

出于某种原因,Qt的人员还没有包含这种类型的转储方法,所以我试图根据本文档和本指南自己创建一个转储方法。

我不熟悉Python,所以很不幸,我无法运行一些东西。有人能帮我创建这样一个函数吗?它只会在QtCreator的value列中显示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文件的末尾。在这种情况下,您可以跳过第一行,因为它已经在文件中了。

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

注意:

  1. 这个脚本只能在QtCreator内部工作,因为我们使用它的特定dumper(例如putStringValue
  2. 我们调用QUuid::toString(),它创建了一个QString对象。我不确定gdb和python是如何处理的,也不确定是否需要清理它以避免内存泄漏。对于调试来说,这可能不是什么大事,但需要注意