2014-10-17 95 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 2014-10-17 13:05:51

回答

2

为了调试崩溃转储,您需要为Qt提供调试符号(.pdb文件)。预构建SDK中提供的库不附带调试符号,因此您必须构建库你自己为了让他们确保设置下列编译器标志:

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

假设你正在使用MSVC和QMake。您当然需要使用相同的标志来构建自己的应用程序。然后确保在调试器中设置了符号路径,对于WinDbg,您需要使用.symfix.sympathFile > Symbol File Path,并将其指向包含.pdb文件的所有目录。如果你使用的是Visual Studio,它也会要求原始的二进制文件可用,因为它使用了一个完全不同的调试器,这个调试器看起来行为不同。如果你想要更复杂的话,可以看看symstore或者breakpad。

有关更多信息,请参阅我的问题和回答here