iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在XCode 3.xx GDB中打印Qt数据结构(QList,QString等)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_772_0@

概述

我试在xcode中调试一些Qt容器,我从GDB返回的结果没用: print l1 $1 = (QSharedPointer<QList<SNAPSHOT> > &) @0x102780650: { <QtSharedPointer::ExternalRefCount<QList<SNAPSHOT> >> = { <QtSharedPointer::Basic<QList<SNAPSH
@H_618_7@
我试在xcode中调试一些Qt容器,我从GDB返回的结果没用:

print l1
$1 = (QSharedPointer<QList<SNAPSHOT> > &) @0x102780650: {
  <QtSharedPointer::ExternalRefCount<QList<SNAPSHOT> >> = {
    <QtSharedPointer::Basic<QList<SNAPSHOT> >> = {
      value = 0x1161e47e0
    },members of QtSharedPointer::ExternalRefCount<QList<SNAPSHOT> >: 
    d = 0x1161ace00
  },<No data fields>}
Current language:  auto; currently c++
(gdb) print strQuery
$2 = {
  d = 0x1161e2890

如何从l1(QList)和strQuery(QString)获得一些有用的输出
我已经尝试过使用这个.gdbinit,它添加了一些像“printq4String”这样的宏,但是这些使用非常痛苦,因为在打印结构时我需要在每个成员变量上手动运行它.

解决方法

好吧,这让我疯了但我明白了.

首先确保您的项目设置为使用GCC 4.2而不是纯LLVM进行编译,如下所示:
 

LLVM现在被设置为XCode 4中的认编译器,并且它不为类内部的struct添加正确的调试信息.

现在在〜/ .gdbinit中添加

define pqts
    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

你现在可以简单地输入pqts s1,它会很好地转储你的QString.

大佬总结

以上是大佬教程为你收集整理的c – 在XCode 3.xx GDB中打印Qt数据结构(QList,QString等)全部内容,希望文章能够帮你解决c – 在XCode 3.xx GDB中打印Qt数据结构(QList,QString等)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。