4

在 Delphi 中,编译器指令 {$d-} 和 {$l-} 允许您有效地避免为已定义的代码段生成调试和局部变量信息。

在一个实际的问题中,它会在调试视图中“隐藏”代码,它不会出现在调用堆栈中,并且您在调试时也不会进入它。

有什么方法可以使用 VS 2008 在 c# 中实现相同的结果?

注意:原因是我们有一个稳定的框架,不需要调试,但往往会弄乱调用堆栈和标准调试流程。

4

3 回答 3

6

我使用DebuggerNonUserCodeAttribute以便默认情况下您不会中断或进入代码;但是,与 DebuggerStepThrough 相比,这样做的好处是您可以转到 Options->Debugger->Just My Code 设置并允许破坏/调试您标记的代码。如果您遇到问题,这将有很大帮助。我通常在整个课程中使用它。

顺便说一句,调用堆栈将自动隐藏标有此属性的非用户代码:) 当然,您只需右键单击调用堆栈窗口并切换“显示外部代码”即可隐藏/显示丢失的堆栈信息。

于 2011-01-17T16:59:46.813 回答
3

我想你想要这个DebuggerStepThrough属性:

DebuggerStepThrough指示调试器单步执行代码而不是单步执行代码。

[DebuggerStepThrough]
public void MyMethod()
{

}

这对于 setter/getter 尤其有用,因为调试这些通常只会增加噪音(来自 msdn 的示例):

public int Quantity
{ 
    [DebuggerStepThrough] 
    get { return ComplexLogicConvertedToMethod(); } 
    [DebuggerStepThrough]      
    set { this.quantity = value ; }
}
于 2011-01-17T16:52:53.287 回答
0

或者跳过代码的特定部分:

... some production code
#if DEBUG
    Console.WriteLine("Debug version");
#endif
... some more production code
于 2011-01-17T17:02:37.157 回答