最近了解了DebuggerDisplay属性,发现它非常有用。然而,让我惊讶的是它没有附加[ConditionalAttribute("DEBUG")]
属性。是否有一些方法可以强制使用该属性?或者尝试这样做是一个坏主意吗?或者由于其他原因,这并不重要?
最近了解了DebuggerDisplay属性,发现它非常有用。然而,让我惊讶的是它没有附加[ConditionalAttribute("DEBUG")]
属性。是否有一些方法可以强制使用该属性?或者尝试这样做是一个坏主意吗?或者由于其他原因,这并不重要?
[ConditionalAttribute("DEBUG")]仅用于优化方法调用。
如果您真的想从构建中删除它们,可以使用#ifdef,以便代码仅在发布模式下编译。
需要记住的一件事是,只要有pdb文件,您仍然可以在发布模式下调试二进制文件。发布模式只是更快地清除变量并应用一些编译器优化。
由于我经常需要在没有 DEBUG
指令的 Release 配置构建中调试,因此我不希望这些对调试器的提示被删除。
但是,如果您在调试时显示的信息中有一些专有或机密信息,您可能希望考虑使用ConditionalAttribute
或 #if/#elif/#endif
预处理指令来控制在发布版本中发出什么。
例如,您可以执行以下操作:
#if DEBUG
[DebuggerDisplay...]
#endif
public class MyAwesomeClass
{
}
这将确保只有在给出DEBUG指令时才会发出该属性。
partial
。public partial class MyClass{
//class details here
}
And then elsewhere:
#if DEBUG
[DebuggerDisplay("DebuggerValue")]
public partial class MyClass{
//anything needed for debugging purporses
}
#endif
这样可以使用DebuggerDisplay或其他属性,而不会使基类混乱。
我一直在使用一些文件,都包含在#if DEBUG
中,来保存这些调试部分。这有助于保持核心类的清洁,并且我不必记住为每个属性开始/结束编译器指令。