4

내 프로그램은 QByteArray 유형의 일부 변수를 사용하여 데이터 (바이트)를 포함합니다. 그 바이트는 '\ 0', 1, ...과 같은 특수 문자 일 수 있습니다. 따라서 디버깅 할 때 특수 문자 뒤에 모든 요소를 ​​볼 수 없습니다. std :: vector를 사용하면 모든 요소를 ​​볼 수 있습니다. QByteArray를 사용해야하지만 디버깅 할 때이 변수의 모든 요소를 ​​볼 수는 없습니다. 도와 줘, plz! 감사합니다.디버깅 중 Qt 객체 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" 
+0

ba.replace ("\ 0", "\\ 0") :

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

반환 0 바이트. ba.toHex()는 일반적으로 인쇄 할 수없는 문자에 유용합니다. –

+0

@ JoachimPileborg : 감사합니다. – aviit

+0

@FrankOsterfeld : 아니요, 어떤 문자 일 수도 있습니다. – aviit

답변

1

디버깅, 당신은 QString에 QBytearray을 변환하고 출력을 볼 수 있습니다 . 예를 들어

:이 문제를 해결할 수

QByteArray bArray; 

QString str = ""; 

str.append(bArray); 

QDebug() << str ; // this will display the content in your console/application output window 

희망. 그것을 할 수있는 방식 파이썬에서 의미있는 QString로 표시하려면 QByteArray :

+0

QString은 처음 인쇄 할 수없는 문자 다음에 오는 모든 문자를 볼 수 없기 때문에 결과가 동일합니다. 제 말은 IDE (Visual Studio 2010)에서 디버깅하는 것입니다. – aviit

+0

나는 '\ 0'을 사용하는 대신 '\\ 0'을 사용해 보았습니다. 단일 슬래시가 명령으로 사용되므로 '\ 0'은 리눅스에서 Null 문자를 의미합니다. 한번 시도해보십시오. 나는이 문제에 많은 시간을 닥쳤다. – skg

2

나는 내가에 가까운 일을하고 어떤 방법을 찾을 수 있기 때문에 작성해야했습니다 여기에 코드 조각에 기여 아스키는 다음과 같이 유지 이 특수 문자는 16 진 코드으로 표시됩니다.

누군가가 더 좋은 방법을 알고 있다면! (여기에는 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; 
} 

예를 들면 : 그냥 약의 경우

"et<00>voil<e0>"