避免在c#中为一段代码调试和调用堆栈

时间:2011-01-17 16:49:05

标签: c# visual-studio-2008 compiler-directives

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

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

有没有办法在使用VS 2008的c#中实现相同的结果?

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

3 个答案:

答案 0 :(得分:6)

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

顺便说一下,调用堆栈会自动隐藏用这个属性标记的非用户代码:) 当然,您只需右键单击调用堆栈窗口并切换“显示外部代码”以隐藏/显示缺少的堆栈信息。

答案 1 :(得分:3)

我认为你想要DebuggerStepThrough属性:

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

[DebuggerStepThrough]
public void MyMethod()
{

}

这对于setter / getter特别有用,因为调试通常只会增加噪声(例如来自msdn):

public int Quantity
{ 
    [DebuggerStepThrough] 
    get { return ComplexLogicConvertedToMethod(); } 
    [DebuggerStepThrough]      
    set { this.quantity = value ; }
}

答案 2 :(得分:0)

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

... some production code
#if DEBUG
    Console.WriteLine("Debug version");
#endif
... some more production code