2014-10-17 2 views
2

QT 제작자를 사용하여 QT 애플리케이션을 개발했습니다. Windows 7 및 XP에서 프로그램이 충돌하는 경우가 있습니다. 마지막으로 이런 일이 있었는데 태스크 관리자를 사용하여 덤프 파일을 만들었습니다. 나는 WinDbg를 사용하여 시도하지만 QT를 위해 '기호'파일을 찾을 수 없다는 오류의 부하를 가지고 :WinDbg의 QT 앱 디버깅

*** ERROR: Symbol file could not be found. Defaulted to export symbols for QtWebKit4.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for QtCore4.dll - 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for QtGui4.dll - 
*** ERROR: Module load completed but symbols could not be loaded for MyApp1.1b.exe 
*** WARNING: symbols timestamp is wrong 0x522be0b3 0x522bdb3e for mswsock.dll 
*** WARNING: symbols timestamp is wrong 0x4a5be0b0 0x4ce7ba42 for winmm.dll 
*** WARNING: symbols timestamp is wrong 0x4a5be093 0x4a5bdb3c for uxtheme.dll 
*** WARNING: symbols timestamp is wrong 0x53b9ff75 0x53b9f968 for AudioSes.dll 

사람이 WinDbg를 또는 유사한 도구를 사용하여 QT 응용 프로그램에서 응용 프로그램 충돌을 디버깅하는 방법을 알고 있나요?

+1

릴리스 버전을 디버깅하고 있습니다. 응용 프로그램의 디버그 버전은'QtCore4D.dll' 등과 연결될 것입니다 ... 그리고 나는이 경우에 기호가있을 것으로 기대합니다. – UmNyobe

답변

2

크래시 덤프를 디버깅하려면 Qt에 디버그 기호 (.pdb 파일)가 있어야합니다. 미리 빌드 된 SDK에 포함 된 라이브러리에는 디버깅 기호가 제공되지 않으므로 라이브러리를 빌드해야합니다 자신에게 다음 컴파일러 플래그를 설정하도록해야합니다.

QMAKE_CXXFLAGS_RELEASE += -Zi 
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF 

MSVC 및 QMake를 사용한다고 가정합니다. 물론 동일한 플래그로 자신의 응용 프로그램을 빌드해야합니다. 그런 다음 디버거에서 기호 경로를 설정했는지 확인하십시오. WinDbg의 경우 .symfix 또는 .sympath 또는 File > Symbol File Path을 사용해야하고 .pdb 파일이있는 모든 디렉터리를 가리켜 야합니다. Visual Studio를 사용하는 경우 원래 동작하는 바이너리가 다르게 동작하는 완전히 다른 디버거를 사용하므로 원래 바이너리가 필요합니다. 이것에 대해보다 정교 해지고 싶다면 symstore 또는 breakpad를보십시오.

자세한 내용은 내 질문 및 대답 here을 참조하십시오.