【问题标题】:How to stop a custom ThrowHelper from appearing in your StackTrace?如何阻止自定义 ThrowHelper 出现在 StackTrace 中?
【发布时间】:2012-10-19 14:25:35
【问题描述】:

.net 基类库中的一个模式是 ThrowHelper。从本质上讲,它减少了每个方法的字节码数量。

无论如何,我想知道是否有一个属性指令可以阻止 throw Helper 中导致的错误在 helper 内停止。我希望调试器在调用行停止。

  ThrowHelper.ThrowAnException ()

而不是在 ThrowAnException() 中

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    你也可以用attribute标记你的投掷方法:

    class ThrowHelper
    {
        [DebuggerStepThrough]
        public static void Throw()
        {
            throw new InvalidOperationException();
        }
    }
    

    那么调试器就不会进入这个方法了。

    【讨论】:

    • +1:看起来不错。是否可以在类级别进行标记?
    • 是的,你可以把它放在课堂上。
    • 有没有办法阻止它出现在单元测试的堆栈跟踪中?这是现在唯一剩下的烦恼。
    • 我不知道有什么方法可以让您修改异常的堆栈跟踪。
    【解决方案2】:

    您可以让辅助方法实际上不抛出异常,只需创建它。堆栈跟踪将指向您真实方法中的 throw 语句,而不是 ThrowHelper 中的任何内容。

    throw ThrowHelper.CreateAnException();
    

    【讨论】:

    • 好的。这会起作用,但有时 throw 助手内部有超基本的逻辑,所以在这种情况下这不会有用。
    • 不过,它会整合异常消息和此类事物的逻辑。
    • 这是微软实际推荐的方法。请参阅this link 并向下滚动:“辅助方法不得抛出异常,否则堆栈跟踪将无法准确反映导致异常的调用堆栈。”
    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多