为 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 > 额外调试助手 > 浏览 并选择您的文件。
注:
- 此脚本只能在 Qt Creator 中运行,因为我们使用其特定的转储程序(例如
putStringValue
)。
- 我们调用
QUuid::toString()
创建一个 QString
对象。我不确定 gdb 和 python 是如何处理这个问题的,以及是否需要清理它以避免内存泄漏。这对于调试可能不是什么大问题,但需要注意。
我在我的项目中使用 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 > 额外调试助手 > 浏览 并选择您的文件。
注:
- 此脚本只能在 Qt Creator 中运行,因为我们使用其特定的转储程序(例如
putStringValue
)。 - 我们调用
QUuid::toString()
创建一个QString
对象。我不确定 gdb 和 python 是如何处理这个问题的,以及是否需要清理它以避免内存泄漏。这对于调试可能不是什么大问题,但需要注意。