这可能是不现实的,但是是否有可能使组件能够在其进程中发生的所有第一次机会异常时得到通知?
我们有一些第三方(由我们承包)组件,除了吃异常(exception)和商业关系的政治之外什么也做不了,使整个磨难成为皇家的痛苦。
我们也意识到我们的一些代码正在执行令人失望的操作,让异常消失在深渊中,而不是使用我们的集中式异常记录器。
我认为我们的应用程序必须作为调试应用程序的子进程启动才能达到效果,但我认为值得一问:)
最佳答案
您可以使用 .net 分析 API 来获取各种状态下的异常通知,这些是可用的方法:
ExceptionThrown
ExceptionSearchFunctionEnter
ExceptionSearchFunctionLeave
ExceptionSearchFilterEnter
ExceptionSearchFilterLeave
ExceptionSearchCatcherFound
ExceptionOSHandlerEnter
ExceptionOSHandlerLeave
ExceptionUnwindFunctionEnter
ExceptionUnwindFunctionLeave
ExceptionUnwindFinallyEnter
ExceptionUnwindFinallyLeave
ExceptionCatcherEnter
ExceptionCatcherLeave
ExceptionCLRCatcherFound
ExceptionCLRCatcherExecute
使用分析 api 并不完全适合胆小的人;看看http://msdn.microsoft.com/en-us/library/ms404386.aspx作为您的研究和 http://msdn.microsoft.com/en-us/library/bb384687.aspx 的切入点专门用于异常处理。
我不知道在您的托管代码中执行此操作的简单方法,例如
AppDomain.FirstChanceException += new EventHandler...
事件或类似。
编辑:一个可能更好的选择是使用 unamanaged debugging API反而。
基本上你可以设置一个 ICorManagedCallback/ICorManagedCallback2回调使用 ICorDebug::SetManagedHandler并在发生异常时获取回调。
我在这方面经验不足,无法了解分析 api 的优势/劣势。
我刚看了mdgb sample它使用 ICorDebug API,它似乎从异常中获得了足够多的通知(要快速查看发生了什么事件,请在 corapi/Debugger.cs:406 中的 HandleEvent 方法中设置断点)
关于.NET - 用于密集调试的第一次机会异常监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/952304/