博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xcode调试打印QString
阅读量:5157 次
发布时间:2019-06-13

本文共 1735 字,大约阅读时间需要 5 分钟。

xcode调试打印QString

xcode内置GDB,在调试工程过程中可以通过print命令打印基本的数据类型,但像QString这样复杂类型就不行了。虽然我们可以在程序代码通过添加Qt的调试打印语句qDebug()<<“debug strText:”<<strText 等方式查看对应的QString值,但这样在调试过程中,显然很不方便。幸好,gdb提供了扩展功能,可以自定义宏命令方式,把自定义的命令放到$HOME/.gdbinit文件中,每次启动gdb时就可以自动加载了,下面的代码是从网上摘录的:

define printqstringprintf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->sizeset $i=0while $i < $arg0.d->sizeset $c=$arg0.d->data[$i++]if $c < 32 || $c > 127printf "\\u0x%04x", $celseprintf "%c", (char)$cendendprintf "\"\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

你可能感兴趣的文章
007_控制器可扩展性
查看>>
SQL server 第三方驱动 JDTS
查看>>
洛谷P3048 [USACO12FEB]牛的IDCow IDs
查看>>
一些计划
查看>>
SQL Server ->> SQL Server 2016新特性之 --- Query Store
查看>>
最大连续子序列
查看>>
HDU1257
查看>>
初步了解HTTP
查看>>
unittest----assert断言的使用
查看>>
caffe+opencv3.3.1
查看>>
利用正则按固定长度分割字符串
查看>>
NGUI里的sprite和label有白色的边框
查看>>
python——进程基础
查看>>
CentOs6.6安装Python3
查看>>
PHP框架自动加载类文件原理
查看>>
深度链接对社会化营销有哪些价值和作用?
查看>>
【php数组函数序列】之sort() - 对数组的元素值进行升序排序
查看>>
文件锁
查看>>
使用mybatis插入数据(insert)时返回主键的问题
查看>>
[LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数
查看>>