关于VC异常捕获的一个问题:
发信站: 水木社区 (Thu Sep 13 18:25:57 2007), 站内
关于VC异常捕获的一个问题:
在MFC中如何用一个函数捕获所有异常,在有异常的时候能转到自己的处理程序,比如显示程序的当前堆栈及寄存器信息。
现在的问题是:
1.我发现try语句会漏掉一些异常
2.MFC中异常我只知道在每个相关函数中加入异常捕获的代码,感觉这种方式太麻烦了。
我就想就修改一处地方便可以捕获所有异常,请问该怎么做呢?
多谢!
处理结构化异常SetUnhandledExceptionFilter
先在程序初始化的时候 设置 回调函数,回调函数对应有处理程序,处理程序会把dump到的内存堆栈保存下来。
然后用该堆栈就可调试了。
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
hInst = hInstance;
::SetUnhandledExceptionFilter(UEFilter);
}
LONG WINAPI UEFilter(PEXCEPTION_POINTERS ExceptionInfo)
{
// make up crash handler app name
char szFileName[_MAX_PATH];
::GetModuleFileName(NULL, szFileName, _MAX_PATH);
std::string strFileName;
std::string strFilePath;
::SplitFileName(szFileName, strFileName, strFilePath);
strFilePath += "CrashHandler.exe";
// make up share memory name
DWORD dwTick = ::GetTickCount();
char szMapFileName[256];
_snprintf(szMapFileName, 256, "%s%d", strFileName.c_str(), dwTick);
CrashAdapter::Handle(strFilePath.c_str(), szMapFileName, ExceptionInfo);
return EXCEPTION_EXECUTE_HANDLER;
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1566035