zoukankan      html  css  js  c++  java
  • 解决GDB输出Qt内置类型的显示问题

    自从GDB 7.0之后,就加入了Pretty-Printer的这个概念。简单理解就是他可以让你用Python写一串脚本,然后让gdb去读取这串脚本后,可以自由的输出由你想自己定义的格式。我们直接举个简单例子:

    #include <QString>
    
    int main(int argc, char *argv[])
    {
        QString a = "abc";
    
        int i = 3;
    
        return 0;
    }

    在这里我们想打印a的值,我们把断点停到int i = 3上,然后p a可以看到下面的输出

    (gdb) p a
    $1 = {static null = {<No data fields>}, static shared_null = {ref = {
          _q_value = 2}, alloc = 0, size = 0, 
        data = 0xb7fb14d2 <QString::shared_null+18>, clean = 0, simpletext = 0, 
        righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, 
      static shared_empty = {ref = {_q_value = 1}, alloc = 0, size = 0, 
        data = 0xb7fb14be <QString::shared_empty+18>, clean = 0, simpletext = 0, 
        righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, 
      d = 0x804b008, static codecForCStrings = 0x0}

    这个显然不是我们可以接受的,于是google了一番,发现还真有关于Qt的Printer,其实就是个py文件,下下来之后我们需要在我们自己的.gdbinit上加入

    python 
    import sys 
    sys.path.insert(0, '/home/rickyk/.gdb') 
    
    from qt4 import register_qt4_printers
    register_qt4_printers (None)
    end
    set print pretty 1

    可以看到里面调用了register_qt4_printers这个函数并完成了相关注册,将下好的qt4.py放到.gdb中之后重新gdb来查看a的值

    (gdb) p a
    $1 = "abc"

    哈哈,大功告成,此时的QString变量也可以顺利输出了。

    PS: 关于Qt Creator的Debug Helper和这篇文章的原理有点区别,Qt Creator采用的Debug技术只要是用了Python的dumper。因为兼容性的问题,Qt Creator要保证在绝大多数机器上都可以使用,所以gdb版本必须满足6.8.50才能支持支持Python脚本从而进行Pretty Printer,如果这样的话就不能保证所有的机器都可以正确看到Qt内置变量。所以Qt Creator用了gdb比较通用的特性----Compiled Dumpers,于是乎,Qt Creator自己写了一个Dumper专门用来配合Debug,这样解决了平台兼容性问题。当然了,目前很多Qt Creator安装包里都会自带一个支持Python的gdb也是出于这方面的考虑,总之这两套原理并不相同,也就是说,如果你想让你的终端gdb正常输出,你还是得去配一套Printer才可以。

    参考链接:http://blog.csdn.net/dbzhang800/article/details/6830638

                     http://nikosams.blogspot.com/2010/01/gdb-qt-pretty-printers-updated.html

  • 相关阅读:
    js控制滚动条滑动
    js二维码插件总结
    wer
    验证插件——jquery.validate.js
    .py小程序总结
    Linux中xargs命令的使用
    Cacti、解决cacti的snmp error
    Cacti安装使用
    用Python发一个高逼格的朋友圈
    windows安装zabbix-agent
  • 原文地址:https://www.cnblogs.com/rickyk/p/4184912.html
Copyright © 2011-2022 走看看