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

标签 c# vb6 exception-handling callstack

标题可能有点困惑,我来解释一下。假设您有这个调用链...

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

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

现在,如果有人使用错误的 index 值调用 DoWork,它会一直在 CheckIndex 处抛出异常,目前,这就是调试器中断的地方。然后,您必须返回调用堆栈,才能看到真正的罪魁祸首是有人将错误数据传递给了 DoWork

现在回到 VB6 时代,您可以简单地用一个属性装饰 DoWorkHelperCheckIndex 来表示“如果我内部抛出任何异常,请不要突出显示我” ,而是我的来电者,因为他们是那些给我带来坏消息的人!因此,在这种情况下,代码会在 DoWork 内部中断,并突出显示对 DoWorkHeper 的调用。

还有一个设置可以禁用它,因此为了更深入的调试目的,它仍然可以在 CheckIndex 处抛出,这是它实际发生的水平,但有一半的时间,在那里崩溃不会告诉你任何事情,因为如果不返回调用堆栈,您将不知道自己是如何到达那里的。

把它想象成一种修饰代码的方式,当您遇到异常时,自动遍历调用堆栈,直到坏值实际告诉您一些有用的信息。

请注意,这类似于“Break On All Exceptions”,只是您是通过修饰来处理它。另外,您不会设置中断特定类型的异常(例如所有空引用异常等),而是设置特定的方法! (或者更准确地说,调用装饰方法的方法。)

那么 C# 或 .NET 通常有这个吗?


更新

虽然我将答案归功于 Dark Falcon,因为他指导我在那里,但我添加了关于所有属性的含义以及在什么上下文中的更详细解释。在下面查看。

最佳答案

请参阅Just My Code选项。您需要使用 DebuggerHiddenAttributeDebuggerNonUserCodeAttribute 装饰 DoWorkHelper

关于c# - 在 C#(或一般的 .NET)中,您可以屏蔽通过属性抛出异常的调用堆栈级别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623269/

相关文章:

unicode - Visual Basic 6 中的本地化

c - 使用相同的代码为 2 种语言生成文档

java - 运行时/已检查/未检查/错误/异常之间的差异

c# - WPF DataGrid 和多线程

C# 列表顺序

vb6 - 如何通过属性公开 UDT 数组?

php - mysql中的异常处理

c# - 在 Windows Server 2008 上部署 .Net Web 服务失败

c# - 使用 ajax 调用 Web 服务

.net - ThreadAbortException内部实现