133 lines
3.4 KiB
C++
133 lines
3.4 KiB
C++
//#include "QtLoadCameraModel3D.h"
|
|
#include "Qt_epWindow.h"
|
|
//#include "QtWidgetsApplication3.h"
|
|
//#include"QtCameraDebug.h"
|
|
|
|
#include <QApplication>
|
|
#include <QTextCodec>
|
|
#include <QDateTime>
|
|
#include <windows.h>
|
|
#include <DbgHelp.h>
|
|
#include <iostream>
|
|
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
//dump文件功能
|
|
LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo);
|
|
#include<iostream>
|
|
|
|
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();
|
|
}
|