【问题标题】:Intercepting all exceptions in C#, even when they're already caught [duplicate]拦截 C# 中的所有异常,即使它们已经被捕获 [重复]
【发布时间】:2014-10-23 16:29:06
【问题描述】:

Visual Studio 能够中断所有异常,即使它们已被捕获。注意 CLR 异常的“Thrown”下的复选框。检查时,调试器会在每个 throw 语句上中断,即使调用堆栈中的某处有 catch

有没有办法在代码中做到这一点?我在 64 位类库中使用 .NET 4.5.1。我的目标是记录每个异常及其堆栈跟踪。这样,当我在没有 Visual Studio 的计算机上测试我的程序时,我会得到一个抛出异常的日志,即使是我通过向用户显示一个对话框来处理的异常。我的程序是多线程的,因此它也需要在任何线程中引发异常时引发事件。

一种糟糕的做法是扩展Exception,将一些代码放入该新类的构造函数中,并确保每个异常都扩展它。但是,这是不可行的,因为引发的许多异常甚至不是由我的代码而是由 CLR 本身引发的。

那么,关于如何引发或监听在抛出异常时引发的事件的想法,即使该异常被捕获?我所看到的只是捕获未捕获异常的各种方法,这不是我想要的。

【问题讨论】:

    标签: c# .net multithreading exception


    【解决方案1】:

    你可以使用AppDomain.FirstChanceException事件。

    AppDomain.Current.FirstChanceException += (sender, eventArgs) =>
    {
        Logger.Log(eventArgs.ToString());
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多