use*_*547 5 c++ xcode qt gdb qlist
我试图在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
Run Code Online (Sandbox Code Playgroud)
如何从l1(QList)和strQuery(QString)获得一些有用的输出?
我已经尝试过使用这个.gdbinit,它添加了一些像"printq4string"这样的宏,但是这些使用非常痛苦,因为在打印结构时我需要在每个成员变量上手动运行它.
我阅读了源代码并提出了这种次优方法,我将其留给社区来改进:
QString s1("This should be easy");
QList<QString> s;
s.push_back("Can you debug me?");
(gdb) print/c s1.d.data[0]@30
$2 = {84 'T', 104 'h', 105 'i', 115 's', 32 ' ', 115 's', 104 'h', 111 'o', 117 'u', 108 'l', 100 'd', 32 ' ', 98 'b', 101 'e', 32 ' ', 101 'e', 97 'a', 115 's', 121 'y', 0 '\0', 0 '\0', 0 '\0', 0 '\0', 0 '\0', 0 '\0', 0 '\0', 0 '\0', 14 '\016', 0 '\0', 0 '\0'}
(gdb) print/c ((QString*)s.d.array).d.data[0]@20
$12 = {67 'C', 97 'a', 110 'n', 32 ' ', 121 'y', 111 'o', 117 'u', 32 ' ', 100 'd', 101 'e', 98 'b', 117 'u', 103 'g', 32 ' ', 109 'm', 101 'e', 63 '?', 0 '\0', 0 '\0', 0 '\0'}
Run Code Online (Sandbox Code Playgroud)