在调试模式下跳过方法的属性

115

是否有一个属性可以应用于方法上,使得在调试模式下步进代码时,调试器停留在方法外部?

4个回答

193
 [DebuggerStepThrough]

(文档)


谢谢。我是一个“记录器”,调试技能有些生疏了。 - BuddyJoe
一个属性的属性呢?[DebuggerStepThrough] 只能用于类、结构体、构造函数和方法。 - Marchy
有没有这个的反向操作?我有一个与生成的部分类相关联的部分类,它具有[DebuggerStepThrough]属性。我希望能够在不更改VS调试器属性的情况下逐步执行我的代码。 - Mike G
3
请确保添加 using System.Diagnostics; - Chad
1
这并不会跨越整个方法(如问题所述),而是跳过它 - 因此调试器会停在其中调用的第一个方法。因此,[DebuggerStepThrough] 仅适用于没有其他调用的非常小的方法。 - user1023602

14

别忘了添加:

using System.Diagnostics;

8

在VB.NET中,它被写作<DebuggerStepThrough>

要使用它,只需将其放置在方法顶部,例如:

<DebuggerStepThrough>
Private Sub form_Paint(sender As Object, e As PaintEventArgs) Handles form.Paint
     ' Picasso
End Sub

1

总的来说回答一下(特别是针对@Marchy,即使这已经是14年之后的事情了)。

警告一下:接下来的代码有点啰嗦。我不喜欢在我的代码中使用VB的Imports或C#的using,因为我遇到的大多数示例代码几乎都省略了这些声明,只展示了代码,没有给读者任何提示,这些对象/类/方法从哪里调用出来的。

在C#中,您可以按如下方式标记类和函数为“调试器步进”:

[System.Diagnostics.DebuggerStepThrough]
class someClass {
    ...
}

[System.Diagnostics.DebuggerStepThrough]
void someMethod (args...){
    ...
}

在VB中,语法几乎相同;只需在看到C#的方括号时使用尖括号即可。
<System.Diagnostics.DebuggerStepThrough>
Friend Class someClass
    ...
End Class

<System.Diagnostics.DebuggerStepThrough>
Private Sub someMethod (args...)
    ...
End Sub

“但是属性怎么办呢?”@Marchy说。如果您将属性声明本身添加到属性中,它们会向您发出错误提示。解决方案是将属性添加到Getter/Setter本身,因为它会影响代码而不是声明。在VB中:
Public Property propertyName

    <System.Diagnostics.DebuggerStepThrough>
    Get
        ...
    End Get

    <System.Diagnostics.DebuggerStepThrough>
    Set (args...)
        ...
    End Set

End Property

希望它有所帮助。
*出错原因是:不能在'{propertyName}'上应用属性“DebuggerStepThroughAttribute”,因为该属性对于此声明类型无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接