在XCode 3.xx GDB中打印Qt数据结构(QList,QString等)

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"这样的宏,但是这些使用非常痛苦,因为在打印结构时我需要在每个成员变量上手动运行它.

use*_*547 1

我阅读了源代码并提出了这种次优方法,我将其留给社区来改进:

    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)

  • 只是一个旁注:在 Qt 5.12 中它是 `print/c *xxx.d[0].data()@20` (2认同)