使用额外信息注释异常而不捕获它们

Eam*_*nne 6 .net c# error-logging exception-handling

有时会出现例外情况.当他们这样做时,他们会被记录下来并进行分析.该日志显然包含堆栈跟踪和其他全局信息,但通常缺少关键的上下文.我想用这些额外的信息来注释一个例外以便于事后调试.

  • 我不希望try{...}catch{... throw;}因为它被视为捕获异常并且使调试更难(在开发期间我希望应用程序停止并且调试器在抛出原始异常时做出反应,而不是在最外面的未捕获异常时) .第一次机会异常处理程序不是一种解决方法,因为不幸的是,有太多误报.
  • 我想在正常的非特殊情况下避免过多的开销.

有没有办法以不捕获异常的方式在异常中存储关键的上下文(例如正在处理的文件名或其他)?

Rob*_*len 1

我根据 Adam 对 Aop 的建议对这座建筑进行了尝试。我的解决方案是 Unity 而不是 postsharp,我唯一的问题是异常是否在调用内部被捕获,这可能是......

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
    {
        //execute
        var methodReturn = getNext().Invoke(input, getNext);

        //things to do after execution
        if (methodReturn.Exception != null)
            methodReturn.Exception.Data.Add("filename", "name of file");

        return methodReturn;
    }
}
Run Code Online (Sandbox Code Playgroud)