xcode调试打印QString
xcode调试打印QString
xcode内置GDB,在调试工程过程中可以通过print命令打印基本的数据类型,但像QString这样复杂类型就不行了。虽然我们可以在程序代码通过添加Qt的调试打印语句qDebug()<<“debug strText:”<<strText 等方式查看对应的QString值,但这样在调试过程中,显然很不方便。幸好,gdb提供了扩展功能,可以自定义宏命令方式,把自定义的命令放到$HOME/.gdbinit文件中,每次启动gdb时就可以自动加载了,下面的代码是从网上摘录的:
define printqstring printf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->size set $i=0 while $i < $arg0.d->size set $c=$arg0.d->data[$i++] if $c < 32 || $c > 127 printf "\\u0x%04x", $c else printf "%c", (char)$c end end printf "\"\n" end
这样xcode在调试工程过程中,就能使用print strText方式打印相应的QString类型值;
以上是针对xcode内置调试器为gdb的情况,对于xcode4.3后的版本,内置编译器换成了LLVM,原来的gdb更换成了lldb,也就是说上边自定义宏命令方式已不起作用,这次可采用另外一种脚本方式,分别创建.lldbinit和qstring.py,并将此两文件放置$HOME/目录下,同样可以达到调试过程中打印/显示QString类型的效果。这两文件内容分别为:
.lldbinit
---------------------------------------------------
~/qstring.py
qstring.py
---------------------------------------------------
import lldbdef utf16string_summary(value, *rest): str_data = value.GetChildMemberWithName("d").GetChildMemberWithName("data") if str_data is None: return '""' length_vo = value.GetChildMemberWithName("d").GetChildMemberWithName("size") length = length_vo.GetValueAsUnsigned(0) if length == 0: return '""' data = str_data.GetPointeeData(0, length) error = lldb.SBError() bytes = data.ReadRawData(error, 0, 2*length) return '"%s"' % (bytes.decode('utf-16').encode('utf-8'))def __lldb_init_module(debugger, *rest): print "registering QString" summary = lldb.SBTypeSummary.CreateWithFunctionName("qstring.utf16string_summary") summary.SetOptions(lldb.eTypeOptionHideChildren) debugger.GetDefaultCategory().AddTypeSummary( lldb.SBTypeNameSpecifier("QString", False), summary )
另外调试过程中我们可以采用另外一种方式,通过转换QString类型来打印相关字符串:print strText.tolatin1.data()。
转载于:https://www.cnblogs.com/sz-leez/p/4070152.html
xcode调试打印QString相关推荐
- 【Xcode使用技巧】Xcode调试方法
这里记录一下自己学习到的一些Xcode调试的方法.这些调试方法可以让我们使用Xcode编写代码进行调试时用起来更顺心应手. Xcode的调试方法包括运行时设置断点,打印到控制台,手写命令打印等. 1. ...
- Xcode 调试方法总结
编写代码过程中出现错误.异常是不可避免的.通常我们都需要进行大量的调试去寻找.解决问题.这时,熟练掌握调试技巧将很大程度上的提高工作效率.接下来就说说开发过程中Xcode的调试方法. 1. Enabl ...
- iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决
http://mobile.51cto.com/iphone-279455.htm XCode调试技巧之EXC_BAD_ACCESS中BUG解决是本文要介绍的内容,在iphone开发的时候EXC_BA ...
- 在xcode调试断点不能停在代码区的终极解决方案
2019独角兽企业重金招聘Python工程师标准>>> 当我们在开发xcode程序时,往往要用到xcode调试,但由于不小心修改了一些配置信息,而导致在调试时不能追踪到具体的代码区, ...
- Android真机调试打印日志的方法
使用模拟器效率是很低的,所以真机调试是多数开发者的选择.使用模拟器调试程序和使用真机调试程序还是有一些不同的.比如,某些手机在调试过程中,不会打印日志出来. 真机调试不输出日志到logcat的原因是手 ...
- Makefile:Makefile中的调试打印方法
Makefile中的调试打印方法 使用info/warning/error增加调试信息 info #info信息,不打印信息所在行号 $(info "here add the debug i ...
- Xcode调试中如何将指定地址转换为其指向的对象
问题现象 一个很简单的问题:在Xcode调试中已知地址addr指向一个对象,如何获取addr指向的对象本身呢? 如上图所示,我们知道地址0x10056e6e0实际指向的是一个对象,但我们如何知道对象类 ...
- Android.mk文件添加调试打印信息
Android.mk文件添加调试打印信息 前言 你是否有过这么一个需求,就是Android的编译环境是由无数个Android.mk文件和其它类型mk文件组成的,为了方便调试你有时候是 ...
- 在xcode 调试C++ 代码时出现的EXC_BAD_ACCESS 错误
使用XCode 调试的时候,运行过程中报了EXC_BAD_ACCESS的错误. google了一翻之后,这个错误因为是调用了一个被释放过的对象导致的,错误的伪代码如下: void TCPClient: ...
最新文章
- Service Mesh 最火项目 Istio 分层架构,你真的了解吗?
- matlab中size、length、cell的用法
- JBoss EAP 7快速入门
- open表和closed表_011 Ruby 多Word表写入Excel
- Hibernate实战——Enumerated注解
- 高精度电压基准电路-TL431实现
- Day04_Manuals for Python@lisongye - list列表
- win7 添加XP共享打印机
- 计算机无线网怎么安装教程,全民wifi驱动怎么安装_电脑安装全民wifi驱动教程
- apache基于端口的虚拟主机配置
- go build解决missing go.sum.entry
- 布赖恩·克尼根位计数算法说明及简单使用
- 个人服务器制作教程,个人网站反代服务器架设教程
- WEB开发技能树-JavaScript-DOM
- 关于“已知有两孩子,第一个孩子为女孩,求第二个孩子为女孩的概率”的个人见解
- 【深圳大学】考研初试复试资料分享
- windows server 2008 系统安装
- Win7 64位 下SlikSVN 的安装配置
- 加强野外火源管控,森林防火二维码
- 智慧人彩票软件 v9.6.2 高级版 怎么用
热门文章
- 用python实现队列的循环左移和右移的实验原理_python的移位操作实现详解
- VS对.ini文件的操作
- JS (与运算)详解
- 松下机器人找原点步骤_桁架机器人在汽车座椅安装生产线中的应用
- 日志框架实现数据采集分析和报警
- Redis配置文件redis.config详解以及关闭Redis服务
- 怎样保持sublime text3中的代码copy到CSDN中之后的漂亮的高亮
- Android -- 开机启动无界面后台程序
- VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
- POJ 1037 DP