解决GDB输出Qt内置类型的显示问题
自从GDB 7.0之后,就加入了Pretty-Printer的这个概念。简单理解就是他可以让你用Python写一串脚本,然后让gdb去读取这串脚本后,可以自由的输出由你想自己定义的格式。我们直接举个简单例子:
#include <QString> int main(int argc, char *argv[])
{
QString a = "abc"; int i = ; return ;
}
在这里我们想打印a的值,我们把断点停到int i = 3上,然后p a可以看到下面的输出
(gdb) p a
$ = {static null = {<No data fields>}, static shared_null = {ref = {
_q_value = }, alloc = , size = ,
data = 0xb7fb14d2 <QString::shared_null+>, clean = , simpletext = ,
righttoleft = , asciiCache = , capacity = , reserved = , array = {}},
static shared_empty = {ref = {_q_value = }, alloc = , size = ,
data = 0xb7fb14be <QString::shared_empty+>, clean = , simpletext = ,
righttoleft = , asciiCache = , capacity = , reserved = , array = {}},
d = 0x804b008, static codecForCStrings = 0x0}
这个显然不是我们可以接受的,于是google了一番,发现还真有关于Qt的Printer,其实就是个py文件,下下来之后我们需要在我们自己的.gdbinit上加入
python
import sys
sys.path.insert(, '/home/rickyk/.gdb') from qt4 import register_qt4_printers
register_qt4_printers (None)
end
set print pretty
可以看到里面调用了register_qt4_printers这个函数并完成了相关注册,将下好的qt4.py放到.gdb中之后重新gdb来查看a的值
(gdb) p a
$ = "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
解决GDB输出Qt内置类型的显示问题的更多相关文章
- 解决gdb 调试 core 文件函数名显示为问号的问题
关于gdb调试core文件总是一堆问号的问题 问题描写叙述:已经在编译选项中增加了-g,可是查看core文件时.还是一堆问号,使用的命令为:gdb -c core 解决方式:因为gdb -c core ...
- 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题
在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...
- Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互
Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...
- QT内使用OpenCV
在QT内使用Opencv,调试了好久总是出问题. 開始在pro文件内进行了opencv的配置,然后就是不能识别#include包括文件,后来不知道什么原因.奇妙地 能够识别包括了. 但是,新的问题出现 ...
- 为什么继承 Python 内置类型会出问题?!
本文出自"Python为什么"系列,请查看全部文章 不久前,Python猫 给大家推荐了一本书<流畅的Python>(点击可跳转阅读),那篇文章有比较多的"溢 ...
- golang的内置类型map的一些事
golang的map类型是一个比较特殊的类型,不同于int, string, byte这样的基本类型,在经过一番探究之后得出了一些结论: 1.golang的map类型虽然是内置类型,但和基本类型有很大 ...
- JavaScript备忘录(1)——内置类型
JavaScript有一些内置类型,还有很多常用的内置的方法,本文稍作总结,以备查阅. 值类型 我的理解,值类型是分配在栈上的,而引用类型(当然也包括引用类型内部的值类型)是分配在堆上的.值类型是不可 ...
- Python——内置类型
Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...
- C++基本内置类型
C++基本内置类型 基本内置类型包括算术类型和空类型. 算术类型 算术类型包括整型和浮点型. 类型 含义 最小尺寸 bool 布尔型 - char 字符型 8 bit wchar_t 宽字符型 16 ...
随机推荐
- [SAM4N学习笔记]LED点灯程序
一.准备工作: 将上一节搭建的工程模板复制一份,命名为"1.blink",这作为我们开发的第一个程序. 二.程序编写: 板子上只有一个可控制的LED,就是LED ...
- DIY常用网站
工作: 技术: 学习: 个人十佳博客介绍:http://hedengcheng.com/?p=676
- 找回linux丢失的磁盘空间
最近一台服务器空间总是报警,磁盘空间不足. 使用 df 命令查看,磁盘空间耗用接近 100%,将机器上过期的数据以及日志清理掉,但是空间很快又是接近 100%. 使用 du 查看,想找出磁盘空间被耗用 ...
- hdoj 1869 六度分离【最短路径求两两边之间最长边】
六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Cow Sorting(置换)
http://poj.org/problem?id=3270 // File Name: poj3270.cpp // Author: bo_jwolf // Created Time: 2013年1 ...
- [学习笔记]设计模式之Builder
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 作为一个新入职的魔导士呢,哦不,是程序员,我以为并没有太多机会去设计项目的软件架构.但是,工作一段时间之后,自己渐渐意识到,哪怕是自己 ...
- Shell脚本高级应用 --实现远程MySQL自动查询[转
#!/bin/sh Host=192.168.5.30 User=abccdef PW=123456 MSG=`mysql -h$Host -u$User -p$PW <<EOF show ...
- 使用 CAS 在 Tomcat 中实现单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.CAS ...
- mysql 加载文本数据
可以配置导入哪几列,每个字段用什么隔开,每行用什么隔开,也可以单独设置某个字段的值. 详细看代码: LOAD DATA INFILE 'D:/aa.txt' INTO TABLE aa FIELDS ...
- Android-Wheel-Menu
https://github.com/anupcowkur/Android-Wheel-Menu