I am trying to debug some Qt containers in XCode and the results I get back from GDB are not useful:
    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
How do I get some useful out put from l1 (QList) and strQuery (QString)?
I've already tried using this .gdbinit which adds some macros like "printq4string" but those are quite painful to use as when printing out structs i need to manually run this on each member variable.
Ok this drove me nuts but I got it.
First make sure your project is set to compile with GCC 4.2 and not pure LLVM as shown in :
 
LLVM is now set as the default compiler in XCode 4 and it doesn't add correct debugging information for struct inside classes.
Now in your ~/.gdbinit just add :
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
and you can now simply type pqts s1 and it will dump your QString nicely.
For strings, p my_string.toStdString().c_str() works
(gdb) p my_string.toStdString().c_str()
$5 = 0x55556d10d7d0 "abc 123 test string"
                        I read the source and came up with this suboptimal approach, I leave it to the community to improve on this:
    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'}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With