在 Delphi 中,编译器指令 {$d-} 和 {$l-} 允许您有效地避免为已定义的代码段生成调试和局部变量信息。
在一个实际的问题中,它会在调试视图中“隐藏”代码,它不会出现在调用堆栈中,并且您在调试时也不会进入它。
有什么方法可以使用 VS 2008 在 c# 中实现相同的结果?
注意:原因是我们有一个稳定的框架,不需要调试,但往往会弄乱调用堆栈和标准调试流程。
在 Delphi 中,编译器指令 {$d-} 和 {$l-} 允许您有效地避免为已定义的代码段生成调试和局部变量信息。
在一个实际的问题中,它会在调试视图中“隐藏”代码,它不会出现在调用堆栈中,并且您在调试时也不会进入它。
有什么方法可以使用 VS 2008 在 c# 中实现相同的结果?
注意:原因是我们有一个稳定的框架,不需要调试,但往往会弄乱调用堆栈和标准调试流程。
我使用DebuggerNonUserCodeAttribute以便默认情况下您不会中断或进入代码;但是,与 DebuggerStepThrough 相比,这样做的好处是您可以转到 Options->Debugger->Just My Code 设置并允许破坏/调试您标记的代码。如果您遇到问题,这将有很大帮助。我通常在整个课程中使用它。
顺便说一句,调用堆栈将自动隐藏标有此属性的非用户代码:) 当然,您只需右键单击调用堆栈窗口并切换“显示外部代码”即可隐藏/显示丢失的堆栈信息。
我想你想要这个DebuggerStepThrough
属性:
DebuggerStepThrough
指示调试器单步执行代码而不是单步执行代码。
[DebuggerStepThrough]
public void MyMethod()
{
}
这对于 setter/getter 尤其有用,因为调试这些通常只会增加噪音(来自 msdn 的示例):
public int Quantity
{
[DebuggerStepThrough]
get { return ComplexLogicConvertedToMethod(); }
[DebuggerStepThrough]
set { this.quantity = value ; }
}
或者跳过代码的特定部分:
... some production code
#if DEBUG
Console.WriteLine("Debug version");
#endif
... some more production code