在C#(或一般的.NET)中,您是否可以屏蔽通过属性抛出异常的调用堆栈级别?

标题可能有点令人困惑,所以我会解释.说你有这个电话链……

public DoWork(index) >> private DoWorkHelper(index) >> private CheckIndex(index)

现在,如果您调用DoWork,它会将调用遍历到CheckIndex,将每个更深的调用添加到调用堆栈.

现在,如果某人使用错误的索引值调用DoWork,它会在CheckIndex中一直向下抛出异常,并且当前,这就是调试器中断的地方.然后你必须走回调用堆栈才能看到真正的罪犯是有人将坏数据传递给DoWork.

现在回到VB6时代,你可以简单地用一个属性装饰DoWorkHelper和CheckIndex来说’如果我内部抛出任何异常,请不要突出显示我,而是突出我的调用者,因为他们是那些通过我糟糕废话的人!’因此,在这种情况下,代码将在DoWork中突破,并突出显示对DoWorkHeper的调用.

还有一个设置可以禁用它,所以为了更深入的调试目的,它仍然可以抛出CheckIndex,它实际发生的级别,但有一半的时间,那里的分解告诉你什么都没有,因为你不知道你是怎么到达那里的走回调用堆栈.

可以想象它是一种装饰代码的方法,可以说当你遇到异常时,自动遍历调用堆栈到坏值实际告诉你有用的地方.

请注意,这类似于“Break On All Exceptions”,除非您通过装饰处理此问题.另外,您没有设置中断特定类型的异常(例如所有空引用异常等),而是特定方法! (或者更确切地说,称为装饰方法的那个.)

那么C#或.NET一般都有这个吗?

更新

虽然我向Dark Falcon提供了答案,因为他指示我在那里,我已经添加了一个更详细的解释,说明所有属性的含义,以及在什么情况下.请在下面查看.

解决方法:

请参阅Just My Code选项.您需要使用DebuggerHiddenAttribute或DebuggerNonUserCodeAttribute来装饰DoWorkHelper.

上一篇:zip方式安装python3


下一篇:vmware workstation完全删除