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相关推荐

  1. 【Xcode使用技巧】Xcode调试方法

    这里记录一下自己学习到的一些Xcode调试的方法.这些调试方法可以让我们使用Xcode编写代码进行调试时用起来更顺心应手. Xcode的调试方法包括运行时设置断点,打印到控制台,手写命令打印等. 1. ...

  2. Xcode 调试方法总结

    编写代码过程中出现错误.异常是不可避免的.通常我们都需要进行大量的调试去寻找.解决问题.这时,熟练掌握调试技巧将很大程度上的提高工作效率.接下来就说说开发过程中Xcode的调试方法. 1. Enabl ...

  3. iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决

    http://mobile.51cto.com/iphone-279455.htm XCode调试技巧之EXC_BAD_ACCESS中BUG解决是本文要介绍的内容,在iphone开发的时候EXC_BA ...

  4. 在xcode调试断点不能停在代码区的终极解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 当我们在开发xcode程序时,往往要用到xcode调试,但由于不小心修改了一些配置信息,而导致在调试时不能追踪到具体的代码区, ...

  5. Android真机调试打印日志的方法

    使用模拟器效率是很低的,所以真机调试是多数开发者的选择.使用模拟器调试程序和使用真机调试程序还是有一些不同的.比如,某些手机在调试过程中,不会打印日志出来. 真机调试不输出日志到logcat的原因是手 ...

  6. Makefile:Makefile中的调试打印方法

    Makefile中的调试打印方法 使用info/warning/error增加调试信息 info #info信息,不打印信息所在行号 $(info "here add the debug i ...

  7. Xcode调试中如何将指定地址转换为其指向的对象

    问题现象 一个很简单的问题:在Xcode调试中已知地址addr指向一个对象,如何获取addr指向的对象本身呢? 如上图所示,我们知道地址0x10056e6e0实际指向的是一个对象,但我们如何知道对象类 ...

  8. Android.mk文件添加调试打印信息

          Android.mk文件添加调试打印信息 前言    你是否有过这么一个需求,就是Android的编译环境是由无数个Android.mk文件和其它类型mk文件组成的,为了方便调试你有时候是 ...

  9. 在xcode 调试C++ 代码时出现的EXC_BAD_ACCESS 错误

    使用XCode 调试的时候,运行过程中报了EXC_BAD_ACCESS的错误. google了一翻之后,这个错误因为是调用了一个被释放过的对象导致的,错误的伪代码如下: void TCPClient: ...

最新文章

  1. Service Mesh 最火项目 Istio 分层架构,你真的了解吗?
  2. matlab中size、length、cell的用法
  3. JBoss EAP 7快速入门
  4. open表和closed表_011 Ruby 多Word表写入Excel
  5. Hibernate实战——Enumerated注解
  6. 高精度电压基准电路-TL431实现
  7. Day04_Manuals for Python@lisongye - list列表
  8. win7 添加XP共享打印机
  9. 计算机无线网怎么安装教程,全民wifi驱动怎么安装_电脑安装全民wifi驱动教程
  10. apache基于端口的虚拟主机配置
  11. go build解决missing go.sum.entry
  12. 布赖恩·克尼根位计数算法说明及简单使用
  13. 个人服务器制作教程,个人网站反代服务器架设教程
  14. WEB开发技能树-JavaScript-DOM
  15. 关于“已知有两孩子,第一个孩子为女孩,求第二个孩子为女孩的概率”的个人见解
  16. 【深圳大学】考研初试复试资料分享
  17. windows server 2008 系统安装
  18. Win7 64位 下SlikSVN 的安装配置
  19. 加强野外火源管控,森林防火二维码
  20. 智慧人彩票软件 v9.6.2 高级版 怎么用

热门文章

  1. 用python实现队列的循环左移和右移的实验原理_python的移位操作实现详解
  2. VS对.ini文件的操作
  3. JS (与运算)详解
  4. 松下机器人找原点步骤_桁架机器人在汽车座椅安装生产线中的应用
  5. 日志框架实现数据采集分析和报警
  6. Redis配置文件redis.config详解以及关闭Redis服务
  7. 怎样保持sublime text3中的代码copy到CSDN中之后的漂亮的高亮
  8. Android -- 开机启动无界面后台程序
  9. VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
  10. POJ 1037 DP