我知道这篇文章已经存在了一段时间,但是,我只是偶然发现它正在寻找其他东西。我很高兴地说,如果过滤器存在于单独的 dll 中,用户 'abelenky' 的要求是可能的。您可以使用调试器调试未处理的异常过滤器。我已经做到了,方法如下:
- 异常过滤器必须存在于单独的 dll 中。稍后你会明白为什么。
您需要向显示消息框的过滤器添加一些代码。我使用以下代码:
#ifdef _DEBUG
AfxMessageBox (_T("At this time, you must attach the debugger to this process in order to debug the filter code."));
#endif
#ifdef 很重要,因为您不希望代码在 Release 构建中执行。我将上面的代码放在过滤器的最顶部。
调试过滤器:
- 在 Visual Studio 中构建应用程序的发布版本(实例 #1)。
- 在 VS (#2) 的第二个实例中构建过滤器的调试版本。
- 将过滤器的调试版本复制到应用程序的发布文件夹。
- 从“调试”菜单“不进行调试”启动您的发布应用程序。
- 导致您的应用程序崩溃。
- 当调试消息框(上图)出现时,切换到 Visual Studio 的第二个实例 (#2)。
- 在 #2 实例中,在 Debug 中打开过滤器项目(如果它未打开)并将调试器附加到您的 Application 实例。
- 消息框显示后,在过滤器代码中设置断点。
- 关闭消息框,你的断点应该被命中。
- 继续调试您的代码。