Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带Qt打印机的gdb_Python_Qt_Gdb_Pretty Print - Fatal编程技术网

Python 带Qt打印机的gdb

Python 带Qt打印机的gdb,python,qt,gdb,pretty-print,Python,Qt,Gdb,Pretty Print,我的目标是允许在gdb中漂亮地打印Qt类。 即如果我有: QString str("str"); 在我的代码中执行 (gdb) print qwe 我想打印str内容(不是真正的QString结构) gdb本身支持使用python定义漂亮的打印机,QtCreator似乎特别使用了这个特性 理想的解决方案是使用Qt附带的漂亮打印机(可以在Qt_安装\share\qtcreator\gdbmacros中找到),或者甚至可以使用整个调试器(可以在Qt_安装\pythongdb中找到) 无论如何

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

QString str("str"); 
在我的代码中执行

(gdb) print qwe 
我想打印str内容(不是真正的QString结构)

gdb本身支持使用python定义漂亮的打印机,QtCreator似乎特别使用了这个特性

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

无论如何,trolls构建了一个新的api来定义标准gdb api上的漂亮打印机,我不知道如何在普通gdb调试器中启用它


那么,有没有一种方法可以在没有Qt Creator的情况下启用Qt的pretty printers的情况下运行gdb,或者有没有关于如何管理它的任何信息。

我认为Qt Creator在上不使用pretty printers,他们可能使用 GDB/MI接口,用于直接访问变量及其内容。如果您想使用漂亮的打印机来显示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'

请注意,Qt Creator在
val[''u M_dataplus'][''u M_p']
Qt Creator上访问类的间隔变量确实使用gdb的python脚本进行漂亮打印,但它没有使用gdb基于python的漂亮打印机制,该机制不会处理像QObject属性这样更复杂的情况。不过,这种机制会产生gdb/MI样式(看起来有点像JSON)的输出,因此在命令行上不容易被人读取。在

上有一些关于界面的简约文档,实际上qt有很多漂亮的打印机: