.NET - 用于密集调试的第一次机会异常监听器?

标签 .net debugging exception first-chance-exception

这可能是不现实的,但是是否有可能使组件能够在其进程中发生的所有第一次机会异常时得到通知?

我们有一些第三方(由我们承包)组件,除了吃异常(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/

相关文章:

java - 为什么我会收到 ArrayIndexOutOfBounds 异常?

c++ - 抛出未处理的异常后过早离开的析构函数是否会释放成员数据?

c# - 你如何将 LINQ 与 Sqlite 一起使用

.net - 关于.NET 中接口(interface)继承的问题

html - 如果我添加 css : top,包装器会向右移动

c# - 我可以配置 NUnit 以便 Debug.Fail 在我运行测试时不显示消息框吗?

mysql - 如何调试 MySQL 上的锁定等待超时?

c# - ef4 导致 Web 服务中的循环引用

.NET - 字典锁定与 ConcurrentDictionary

java - 更改 HashMap 值的成员会导致 java.util.ConcurrentModificationException