使用Qt美化打印程序gdb

11

我的目标是允许在gdb中漂亮地打印出Qt类。 例如,如果我有:

QString str("str"); 

在我的代码中执行

(gdb) print qwe 

我想打印字符串内容(而不是真正的QString结构)。

gdb本身支持使用Python定义漂亮的打印程序,而且似乎Qt Creator部分地使用了这个功能。

理想的解决方案是使用随Qt一起提供的漂亮打印程序(可以在QT_INSTALLATION\share\qtcreator\gdbmacros中找到),甚至整个调试器(可以在QT_INSTALLATION\pythongdb中找到)。

无论如何,某些人构建了一个新的API来定义标准gdb API上的漂亮打印程序,我无法弄清楚如何在纯gdb调试器中启用它。

那么,有没有办法在不使用Qt Creator的情况下运行启用了Qt的漂亮打印程序的gdb,或者关于如何管理此问题的任何信息。

3个回答

3
我认为Qt Creator在严格意义上并没有使用漂亮的打印机,他们可能使用GDB / MI接口直接访问变量及其内容。如果您想使用Pretty Printers显示QString内容,您可以简单地检查类型中实际字符串所在的位置,然后显示它。这里是C ++ std :: string 类型的示例:
 class StdStringPrinter:
     "Print a std::string"

     def __init__ (self, val):
         self.val = val

     def to_string (self):
         return self.val['_M_dataplus']['_M_p']

     def display_hint (self):
         return 'string'

请注意,在val['_M_dataplus']['_M_p']上访问类的间隔变量。

3

0

Qt Creator确实使用gdb的Python脚本进行漂亮打印,但它不使用gdb的基于Python的漂亮打印机制,该机制无法处理更复杂的情况,例如QObject属性。然而,该机制会产生类似于JSON的gdb/MI风格输出,因此在命令行上很难被人类读取。有一些极简文档介绍了http://doc.qt.nokia.com/qtcreator-snapshot/creator-debugging-helpers.html上的接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接