【问题标题】:How do I see the contents of Qt objects QByteArray during debugging?在调试过程中如何查看 Qt 对象 QByteArray 的内容?
【发布时间】:2012-08-25 21:35:42
【问题描述】:

我的程序使用一些 QByteArray 类型的变量来包含数据(字节)。该字节可能是特殊字符,例如 '\0', 1, ... 所以调试时我看不到特殊字符后的所有元素。如果我使用 std::vector,我可以看到所有元素。我必须使用 QByteArray 但在调试时我看不到这个变量的所有元素。帮帮我,请! 谢谢!

示例:QByteArray bytes(4, '\0'); 现在,如果调试,我只看到“”。但我想看 "'\0', '\0', '\0', '\0'" 或类似的东西。

我对 QDateTime 也有同样的问题。但我通过这个帮助解决了:http://www.qtcentre.org/threads/32336-View-QDate-and-QDateTime-in-VisualStudio-debugger

此链接可能会有所帮助,但这不能解决我的问题:http://qt-project.org/wiki/IDE-debug-helpers

例子:

QByteArray ba("Hello"); //debuging, see: ba = "Hello"     
ba.append('\0');     
ba.append("a message"); //we just see: ba = "Hello"   

【问题讨论】:

  • ba.replace( "\0", "\\0" ) 如果它只有大约 0 个字节。 ba.toHex() 通常对无法打印的字符很有用。
  • @JoachimPileborg:谢谢
  • @FrankOsterfeld:不,可能是任何字符
  • @aviit 还有哪些角色给你带来了困难?

标签: c++ visual-studio-2010 qt visual-studio-debugging qbytearray


【解决方案1】:

我在这里贡献了一段我必须编写的代码,因为我找不到任何方法来做类似的事情:将 QByteArray 显示为有意义的 QString 以 python 的方式:ascii 保持不变,特殊字符显示为十六进制代码。

如果有人知道更好的方法! (这里是 QT 4.6)

QString toDebug(const QByteArray & line) {

    QString s;
    uchar c;

    for ( int i=0 ; i < line.size() ; i++ ){
        c = line[i];
        if ( c >= 0x20 and c <= 126 ) {
            s.append(c);
        } else {
            s.append(QString("<%1>").arg(c, 2, 16, QChar('0')));
        }
    }
    return s;
}

如:

QByteArray a;
a.append("et");
a.append('\0');
a.append("voilà");
qDebug() << toDebug(QByteArray(a));

返回:

"et<00>voil<e0>"

【讨论】:

    【解决方案2】:

    为了调试,可以将 QBytearray 转换为 QString 并查看输出。

    例如:

    QByteArray bArray;
    
    QString str = "";
    
    str.append(bArray);
    
    QDebug() << str ; // this will display the content in your console/application output  window
    

    希望这能解决您的问题。

    【讨论】:

    • 结果是一样的,因为 QString 无法查看第一个不可打印字符之后的所有字符。我的意思是在 IDE(Visual Studio 2010)中调试。
    • 我想我明白了,这是 '\0' 的问题,而不是你尝试使用 '\\0'。因为使用单斜杠作为命令,所以 '\0' 表示 linux 中的 Null 字符。请试一试。我多次遇到这个问题。
    猜你喜欢
    • 2010-12-08
    • 2012-07-09
    • 1970-01-01
    • 2015-02-12
    • 2011-03-28
    • 2011-11-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多