【问题标题】:gdb with Qt pretty printers带有 Qt 漂亮打印机的 gdb
【发布时间】:2011-02-11 09:21:55
【问题描述】:

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

QString str("str"); 

在我的代码中执行

(gdb) print qwe 

我希望打印 str 内容(不是真正的 QString 结构)。

gdb 本身支持使用 python 定义漂亮的打印机,Qt Creator 似乎部分使用了这个特性。

理想的解决方案是使用 Qt 附带的漂亮打印机(可以在 QT_INSTALLATION\share\qtcreator\gdbmacros 中找到)或者甚至是整个调试器(可以在 QT_INSTALLATION\pythongdb 中找到)。

不管怎样,巨魔们构建了一个新的 api 来在标准 gdb api 上定义漂亮的打印机,我不知道如何在普通的 gdb 调试器中启用它。

那么,有没有办法在没有 Qt Creator 的情况下启用 Qt 的漂亮打印机来运行 gdb,或者任何有关如何管理它的信息。

【问题讨论】:

    标签: python qt gdb pretty-print


    【解决方案1】:

    我不认为 Qt Creator 在 strict sense 上使用漂亮的打印机,他们可能使用 GDB/MI 接口直接访问变量及其内容。如果您想使用 Pretty Printers 显示 QString 内容,您可以简单地检查类型中的哪个位置是真正的字符串,然后显示它。这里是 C++ std::string 类型的 an example

     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']上类的区间变量的访问。

    【讨论】:

      【解决方案2】:

      实际上有一些漂亮的 qt 打印机: http://nikosams.blogspot.com/2009/10/gdb-qt-pretty-printers.html

      【讨论】:

        【解决方案3】:

        Qt Creator 确实使用 gdb 的 python 脚本来进行漂亮的打印,但它没有使用 gdb 的基于 python 的漂亮打印机制,它不能处理更复杂的情况,如 QObject 属性。不过,这种机制会产生 gdb/MI 风格(看起来有点像 JSON)的输出,因此人类在命令行上不容易阅读。 http://doc.qt.nokia.com/qtcreator-snapshot/creator-debugging-helpers.html上有一些关于接口的简约文档

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-26
          相关资源
          最近更新 更多