【发布时间】:2009-03-08 10:04:47
【问题描述】:
我有一个 MFC SDI 应用程序,它在启动期间加载一个 DLL。我只能查看源代码并使用 DLL,但不能更改和重新编译它。
现在的情况是,每当 DLL 遇到错误时,它都会调用 exit(),如下所示。
bool Func()
{
// .. do something here
if (error) { exit(999); }
}
在我的 MFC 应用程序中,我设置了 SetUnhandledExceptionFilter 来处理所有异常,并且还创建了一个 MiniDump 用于调试目的。
所以现在的问题是,每当 DLL 遇到任何错误时,它只会使用状态码 999 调用 exit(),而我的 ExceptionFilter 不会捕获它,因此没有为 PostMortem 调试创建 MiniDump。
我想知道是否:
1. 我的全局异常处理程序是否有其他方法可以捕获此问题?
2. 我可以覆盖 exit() 函数,以便在调用它时,我调用它“throw(”error遇到!“)”并且我的全局异常处理程序可以捕获它。
3. 我尝试在我的 MFC 应用程序中使用 atexit(),借此我注册另一个函数以在 DLL 调用 exit() 时抛出错误。但这似乎也不起作用。
我真正想做的是,每当 DLL 遇到错误时,我希望生成一个 MiniDump,以便我可以进行事后调试。在这种情况下还有什么其他可能有效的方法吗?
谢谢。
【问题讨论】:
标签: exception visual-c++ dll exit minidump