5

最近了解了DebuggerDisplay属性,我发现它非常有用。然而,令我惊讶的一件事是它没有[ConditionalAttribute("DEBUG")]附加属性。有什么方法可以强制这样做还是尝试一下是个坏主意?还是因为其他原因无关紧要?

4

4 回答 4

5

[ConditionalAttribute("DEBUG")] 仅用于优化方法调用。

如果您真的想从构建中删除这些,您可以使用 #ifdef 以便代码仅在发布模式下编译。

需要记住的一件事是,您仍然可以在发布模式下调试二进制文件,只要您拥有 pdb 文件,这无关紧要。发布模式只是更快地清除变量并应用一些编译器优化

于 2009-07-08T18:34:47.010 回答
4

由于我经常必须在没有该DEBUG指令的发布配置构建中调试东西,我不希望删除调试器的这些提示。

但是,如果您在调试时以显示方式有一些专有或机密信息,您不想将其放入您的发布版本中,您可能需要考虑使用ConditionalAttributeor#if/#elif/#endif预处理器指令来控制发布到您的发布中的内容构建。

例如,您可以这样做:

#if DEBUG
[DebuggerDisplay...]
#endif
public class MyAwesomeClass
{
}

这将确保仅在给出 DEBUG 指令时才发出该属性。

于 2009-07-08T18:40:46.577 回答
2

我将分享一个我已经开始欣赏使用的模式partial

public partial class MyClass{
    //class details here
}

然后在其他地方:

#if DEBUG
[DebuggerDisplay("DebuggerValue")]
public partial class MyClass{
    //anything needed for debugging purporses
}
#endif

这提供了使用 DebuggerDisplay 或其他属性的能力,而不会弄乱基类。

我一直在使用一些文件,所有文件都包含在#if DEBUG其中以保存这些 Debug-Partials。它有助于保持核心类更干净,我不必记住为每个属性启动/结束编译器指令。

于 2016-03-16T15:54:28.077 回答
0

我认为这不是一个好主意,因为很多时候,除了在调试器 IMO 中显示它之外,您附加属性的东西还有其他用途。

于 2009-07-08T18:33:22.473 回答