首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获处理异常

捕获处理异常
EN

Stack Overflow用户
提问于 2010-11-24 07:10:47
回答 3查看 1.2K关注 0票数 2

嘿:)

是否有任何方法在全球范围内捕获已处理的异常?我知道我们可以用“AppDomain.CurrentDomain.UnhandledException”和"Application.ThreadException“捕获未处理的异常,但我想在我已经捕获的异常中添加一些处理(例如写入日志等)。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2010-11-24 07:20:52

通常,您可能希望在代码中的最低级别捕获异常。相对于异常发生的位置,它们被传递得越近,您就越有可能修复导致它们的问题。

如果您的all. 不能在这个级别上采取任何纠正措施,希望解决导致异常的问题,那么就不应该在上处理它--只是让异常泡起来,然后按您的意愿在全局处理它。

尽管如此,如果您已经在较低级别处理了异常,那么--您将能够在更高级别上捕获它的唯一方法--是在较低级别上从Catch块获取

因此,例如:

代码语言:javascript
复制
try
{
   //your code
}
catch (SomeException e)
{
   //take any relevant handling measures

   //rethrow the exception
   throw; 
}

当然,这在技术上意味着这个较低级别的Try/Catch块无法处理异常,但这是在更高级别上捕获任何东西的唯一方法。

有关重新抛出异常的详细信息,请参阅:

  • 为什么要重新抛出异常?
  • http://weblogs.asp.net/fmarguerie/archive/2008/01/02/rethrowing-exceptions-and-preserving-the-full-call-stack-trace.aspx
  • http://msdn.microsoft.com/en-us/library/xhcbs8fz.aspx
票数 4
EN

Stack Overflow用户

发布于 2010-11-24 07:15:34

您可以重新抛出相同的异常,并在调用模块/日志记录模块中捕获它,然后将其记录下来。例如:

代码语言:javascript
复制
private void DivideByZero()
{
try
{
    int x = 2/0;
}
cath(Exception ex)
{
    Console.Writeline(ex.ToString());
    throw;
}
}

void Main(string[] a)
{
    try
    {
       DivideByZero();
    }
    catch(Exception x)
    {
        // write logging code here .. 
    }

}
票数 2
EN

Stack Overflow用户

发布于 2010-11-24 07:21:37

不,没有全局异常事件。这将是非常危险的,您将捕获来自其他模块的各种内部异常,这些模块不是用于公共用途的。它还可能淹没您的日志异常。

为了达到同样的效果,您应该更有条理地处理异常。封装异常的实际处理,并在实际的catch块中执行最少的工作。或者,只要在某个地方有一个"HandleException“方法,就可以传递每个异常。您还可以查看企业库中的异常处理块

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4264276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档