📄 sehdump.cpp
字号:
// SEHDump.cpp: implementation of the CSEHDump class.
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include "SEHDump.h"
#include "MyLog.h"
#include <eh.h>
//#include "MyExceptionDump.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
void DumpExceptionSimple(EXCEPTION_POINTERS* lpExceptInfo);
static void My_trans_func( unsigned int u, EXCEPTION_POINTERS* lpExceptInfo )
{
// DumpExceptionEx(lpExceptInfo);
DumpExceptionSimple(lpExceptInfo);
}
BASESUPPORT_API long InstallXcptProber(const bool bUsedInThread)
{
// UninitSymInfo();
// bool bOK=InitSymInfo(0);
_set_se_translator( My_trans_func );
return 0;
}
void DumpExceptionSimple(EXCEPTION_POINTERS* lpExceptInfo)
{
if(lpExceptInfo)
{
if(lpExceptInfo->ExceptionRecord)
{
//取得异常地址所在的模块
MEMORY_BASIC_INFORMATION mbi={0,};
DWORD dwRet=VirtualQuery(
lpExceptInfo->ExceptionRecord->ExceptionAddress,
&mbi,
sizeof(mbi));
HMODULE hMod=(HMODULE)mbi.AllocationBase;
char szTxt[8192]={0,};
if(hMod)
{
char szModFilePath[MAX_PATH]={0,};
::GetModuleFileName(hMod,szModFilePath,sizeof(szModFilePath)-sizeof(szModFilePath[0]));
struct _stat fs={0,};
_stat(szModFilePath, &fs );
struct tm tmCreationTime={0,};
struct tm tmModifiedTime={0,};
struct tm *pTM=0;
pTM=localtime(&fs.st_ctime);
if(pTM)
{
tmCreationTime=*pTM;
}
pTM=localtime(&fs.st_mtime);
if(pTM)
{
tmModifiedTime=*pTM;
}
_snprintf(szTxt,sizeof(szTxt),
" hMod:0x%x ModuleFilePath:%s : size:%u . CreateTime:%04d-%02d-%02d %02d:%02d:%02d "
" LatestModifiedTime:%04d-%02d-%02d %02d:%02d:%02d .\n",
hMod,
szModFilePath,
fs.st_size,
1900+tmCreationTime.tm_year,tmCreationTime.tm_mon+1,tmCreationTime.tm_mday,
tmCreationTime.tm_hour,tmCreationTime.tm_min,tmCreationTime.tm_sec,
1900+tmModifiedTime.tm_year,tmModifiedTime.tm_mon+1,tmModifiedTime.tm_mday,
tmModifiedTime.tm_hour,tmModifiedTime.tm_min,tmModifiedTime.tm_sec
);
}
//记录异常信息
WRITE_EXCEPTION_LOG(
" critical Exception encountered (Address:0x%x Flags:0x%x NumberParameters:%d Code:0x%x ModuleInfo:%s)",
lpExceptInfo->ExceptionRecord->ExceptionAddress,
lpExceptInfo->ExceptionRecord->ExceptionFlags,
lpExceptInfo->ExceptionRecord->NumberParameters,
lpExceptInfo->ExceptionRecord->ExceptionCode,
szTxt
);
}
else
{
WRITE_EXCEPTION_LOG("ExceptionRecord is null ");
}
}
else
{
WRITE_EXCEPTION_LOG("lpExceptInfo is null ");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -