//#include "QtLoadCameraModel3D.h" #include "Qt_epWindow.h" //#include "QtWidgetsApplication3.h" //#include"QtCameraDebug.h" #include #include #include #include #include #include #pragma execution_character_set("utf-8") //dump文件功能 LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo); #include int GenerateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS pExceptionPointers, PWCHAR pwAppName) { std::cout << "get in GenerateMiniDump()---" << std::endl; BOOL bOwnDumpFile = FALSE; HANDLE hDumpFile = hFile; MINIDUMP_EXCEPTION_INFORMATION ExpParam; typedef BOOL(WINAPI* MiniDumpWriteDumpT)( HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION ); MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL; HMODULE hDbgHelp = LoadLibrary("DbgHelp.dll"); if (hDbgHelp) pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump"); if (pfnMiniDumpWriteDump) { if (hDumpFile == NULL || hDumpFile == INVALID_HANDLE_VALUE) { TCHAR szPath[MAX_PATH] = { 0 }; TCHAR szFileName[MAX_PATH] = { 0 }; WCHAR* szAppName = pwAppName; SYSTEMTIME stLocalTime; GetLocalTime(&stLocalTime); wsprintf(szPath, "%s_DumpDir", szAppName); CreateDirectory(szPath, NULL); wsprintf(szFileName, "%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp", szPath, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond, GetCurrentProcessId(), GetCurrentThreadId()); hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0); bOwnDumpFile = TRUE; OutputDebugString(szFileName); } if (hDumpFile != INVALID_HANDLE_VALUE) { ExpParam.ThreadId = GetCurrentThreadId(); ExpParam.ExceptionPointers = pExceptionPointers; ExpParam.ClientPointers = FALSE; pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &ExpParam : NULL), NULL, NULL); if (bOwnDumpFile) CloseHandle(hDumpFile); } } if (hDbgHelp != NULL) FreeLibrary(hDbgHelp); std::cout << EXCEPTION_EXECUTE_HANDLER << std::endl; return EXCEPTION_EXECUTE_HANDLER; } LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo) { if (IsDebuggerPresent()) { std::cout << "Tracking location---" << std::endl; return EXCEPTION_CONTINUE_SEARCH; } return GenerateMiniDump(NULL, lpExceptionInfo, (PWCHAR)(L"BlendSim")); } int main(int argc, char* argv[]) { //dump文件功能 SetUnhandledExceptionFilter(ExceptionFilter); //927通用UI捕捉不到这个异常 //QString tesl = ""; //qDebug() << tesl[10]; //可以捕捉到这个异常,并生成dump文件 /*int* p = NULL; *p = 1;*/ QApplication a(argc, argv); ////定制UI界面 //QtWidgetsApplication3 w; //w.show(); //通用UI界面 /*MainWindow w; w.show(); QDesktopWidget m_desk; int m_width = m_desk.width() - m_desk.width()/3; int m_height = m_desk.height() - m_desk.height()/3; int m_x = m_desk.width()/2 - m_width / 2 ; int m_y = m_desk.height()/2 - m_height / 2; w.setGeometry(m_x,m_y,m_width,m_height);*/ /*QtLoadCameraModel3D L; L.show();*/ Qt_epWindow ep; //ep.show(); /*QtCameraDebug cd; cd.show();*/ return a.exec(); }