2009-06-04 63 views
8

这可能是不现实的,但它有可能使被通知所有的第一次机会异常在其过程中存在的一个组成部分?.NET - 第一次机会异常监听密集调试?

我们有一些第三方(由我们签约),这不能做任何事情,但吃excepitions和业务关系的政治使整个考验皇家疼痛组件。

我们也都知道,我们的一些代码执行,让异常消失的深渊,而不是使用我们的集中式例外记录令人失望的作用。

我认为我们的应用程序将不得不开始作为一个调试应用程序来达到效果的一个子进程,但我想这是值得一问:)

回答

2

净利润4.0实际上已经增加了AppDomain.FirstChanceException事件。它在任何catch块执行之前触发。

MSDN article有一些例子。

基本上你只需要添加一个事件处理程序是这样的:

AppDomain.CurrentDomain.FirstChanceException += 
     (object source, FirstChanceExceptionEventArgs e) => 
     { 
      Console.WriteLine("FirstChanceException event raised in {0}: {1}", 
       AppDomain.CurrentDomain.FriendlyName, e.Exception.Message); 
     }; 
+0

非常好的发现!非常感谢您清除这个旧问题! – STW 2013-02-20 14:18:36

7

您可以使用.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代替。

基本上,您可以使用ICorDebug::SetManagedHandler设置ICorManagedCallback/ICorManagedCallback2回调,并在出现异常时获取回调。

我没有足够的经验在这个领域知道什么优势/劣势是在分析API。

我只是看看它使用的API ICorDebug的mdgb sample,它似乎从异常(得到相当足够的通知迅速看到什么事件发生,在corapi/Debugger.cs设置在handleEvent方法断点:406 )

+0

我没想到它是容易的,但在一个道路是我需要至少去感受它。非常感谢! – STW 2009-06-05 15:03:09

+0

我编辑我的答案与MDBG玩弄后,我相信可能是ICorDebug API可能是一个更好的方式来做到这一点。 – 2009-06-16 13:01:34

相关问题