gdb 与 Qt 漂亮的打印机

发布于 2024-10-17 11:04:43 字数 535 浏览 3 评论 0原文

我的目标是允许在 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 的情况下运行 gdb 并启用 Qt 的漂亮打印机,或者可能有任何有关如何管理它的信息。

My goal is to allow pretty printing of Qt classes in gdb.
I.e if i have:

QString str("str"); 

in my code and execute

(gdb) print qwe 

I want str content to be printed(not real QString structure).

gdb itself support pretty-printers to be defined using python, and it seems that Qt Creator partically use this feature.

The ideal solution would be use pretty printers shipped with Qt(can be found in QT_INSTALLATION\share\qtcreator\gdbmacros) or maybe even whole debugger(can be found in QT_INSTALLATION\pythongdb).

Anyway, trolls build a new api to define pretty printers over standard gdb api, and I cannot figure out how to enable it in plain gdb debugger.

So, is there a way to run gdb with Qt's pretty printers enabled without Qt Creator, or maybe any info about how to manage this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱殇璃 2024-10-24 11:04:43

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

I don't think Qt Creator uses pretty printers on the strict sense, they probably use the
GDB/MI interface to directly access variables and their contents. If you want to use Pretty Printers to display QString contents, you could simple inspect where in the type is the real string and then show it. Here is an example for the C++ std::string type:

 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'

Note the access of the interval variables of the class on val['_M_dataplus']['_M_p'].

末骤雨初歇 2024-10-24 11:04:43

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

Qt Creator indeed uses gdb's python scripting for pretty printing, but it does not use gdb's python based pretty printing mechanism which does not handle more complex cases like QObject properties. This mechanism produces gdb/MI-style (looks a bit like JSON) output, though, so it's not easily readable by humans on the command line. There's some minimalistic documentation of the interface on http://doc.qt.nokia.com/qtcreator-snapshot/creator-debugging-helpers.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文