티스토리 뷰
728x90
임베디드 장비등에 QT 응용을 올려서 수행시키는 경우 원격 디버깅을 활용할 수 있는 환경이라면 좋겠지만 이러한 디버깅 환경이 용이하지 않다면 프로그램 수행 과정을 디버깅 할 수 있는 유일한 도구는 코드에서 수행하는 qDebug() 메시지들을 보는 것인데 실제 런타임 환경에서 이 또한 보기 어려우므로 이런 경우 QT의 디버깅 및 경고, 오류 메시지들을 모두 파일로 로깅해서 보는 것입니다.
qDebug() << "App started!";
위의 코드처럼 코드에서 남긴 메시지들을 파일로 남기도록 설정하면 응용의 수행 과정을 간편하게 디버깅 할 수 있습니다.
void LogToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QFile file("/tmp/log.txt"); if(!file.open(QIODevice::Append | QIODevice::Text)) { return; } QTextStream out(&file); QString curtime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); //context.file, context.line, context.function switch (type) { case QtDebugMsg: out << "[Debug]" << curtime << msg << "\n"; break; case QtInfoMsg: out << "[Info]" << curtime << msg << "\n"; break; case QtWarningMsg: out << "[Warning]" << curtime << msg << "\n"; break; case QtCriticalMsg: out << "[Critical]" << curtime << msg << context.function << context.line << "\n"; break; case QtFatalMsg: out << "[Fatal]" << curtime << msg << "\n"; abort(); } file.close(); }
위의 같은 함수를 main()이 있는 코드에 추가하고 아래와 같이 main() 시작 부분에 메시지 핸들러를 지정해 주면 QT 메시지들을 사용자 나름으로 처리할 수 있습니다. 위의 코드에서는 QT 메시지들을 파일에 로깅하고 있습니다.
qInstallMessageHandler(LogToFile);
메시지 핸들러의 파라미터로 전달되는 context 오브젝트의 context.file, context.line, context.function등을 활용하면 해당 메시지를 출력한 소스 코드의 파일명, 함수명, 코드 라인등도 확인할 수 있습니다.
리눅스등의 시스템이라면 아래의 명령으로 로깅되는 메시지를 실시간으로 확인하면서 작업을 수행할 수 있습니다.
tail -f /tmp/log.txt
728x90
'컴퓨터 팁(Tip)' 카테고리의 다른 글
위도, 경도 확인과 위치찾기 (0) | 2017.12.21 |
---|---|
인터넷뱅킹 관련 프로그램 삭제하기 (0) | 2017.08.09 |
sftp server 띄우기 (0) | 2017.06.29 |
microUSB 케이블로 윈도우에서 임베디드 장비의 콘솔 열기 (0) | 2017.05.30 |
CentOS 5 업데이트 오류시 대처 방법 (1) | 2017.04.25 |
댓글