- 在main文件中增加下面代码用于可生成dump文件
#include "widget.h"
#include <QApplication>
#include <QDir>
#include <QDateTime>
#ifdef Q_OS_WIN#include <windows.h>#include <dbghelp.h>
#endifstatic LONG WINAPI exceptionCallback(struct _EXCEPTION_POINTERS* exceptionInfo)
{QCoreApplication *app = QApplication::instance();QString savePath = app->applicationDirPath() + "dump/";qDebug()<<"save path :"<<savePath;QDir dir(savePath);if (!dir.exists() && !dir.mkpath(savePath)) {app->exit(E_UNEXPECTED);return EXCEPTION_EXECUTE_HANDLER;}savePath.append("assit_");savePath.append(QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));savePath.append(".dmp");HANDLE dump = CreateFileW(savePath.toStdWString().c_str(), GENERIC_WRITE,0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (INVALID_HANDLE_VALUE == dump) {app->exit(E_UNEXPECTED);return EXCEPTION_EXECUTE_HANDLER;}MINIDUMP_EXCEPTION_INFORMATION miniDumpExceptionInfo;miniDumpExceptionInfo.ExceptionPointers = exceptionInfo;miniDumpExceptionInfo.ThreadId = GetCurrentThreadId();miniDumpExceptionInfo.ClientPointers = TRUE;DWORD idProcess = GetCurrentProcessId();MiniDumpWriteDump(GetCurrentProcess(), idProcess, dump,MiniDumpNormal, &miniDumpExceptionInfo, NULL, NULL);CloseHandle(dump);app->exit(E_UNEXPECTED);return EXCEPTION_EXECUTE_HANDLER;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);
#ifdef Q_OS_WINSetUnhandledExceptionFilter(exceptionCallback);
#endifqDebug() << endl;Widget w;w.show();return a.exec();
}
2.在.pro工程文件中添加下面代码用于编译生成pdb文件
QMAKE_LFLAGS_RELEASE += /MAP
QMAKE_CFLAGS_RELEASE += /Zi
QMAKE_LFLAGS_RELEASE += /debug /opt:refQMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFOLIBS += -lDbgHelp
3.当程序崩溃时候,将dmp文件拖入visual studio中打开,设置符号链接路径,主要是链接pdb文件
3.右键解决方案属性,添加源代码,调试断点到崩溃代码位置
4.点击使用本机进行调试