在大型项目中,使用哪个更好,以及为什么:
#if DEBUG
public void SetPrivateValue(int value)
{ ... }
#endif或
[System.Diagnostics.Conditional("DEBUG")]
public void SetPrivateValue(int value)
{ ... }发布于 2010-09-24 23:37:51
好吧,值得注意的是,它们的意思完全不同。
如果没有定义调试符号,那么在第一种情况下,SetPrivateValue本身将不会被调用...而在第二种情况下,它将存在,但任何未使用DEBUG符号编译的调用方都将省略这些调用。
如果代码及其所有调用方都在同一个程序集中,那么这种差异就不那么重要了--但这意味着在第一种情况下,您还需要在调用代码周围使用#if DEBUG。
就我个人而言,我会推荐第二种方法--但你确实需要在头脑中保持它们之间的区别。
发布于 2010-09-25 00:09:12
我相信很多人不会同意我的观点,但作为一个构建人员,我经常听到“但它在我的机器上工作!”,我的立场是,你几乎不应该使用任何一个。如果您确实需要用于测试和调试,请找出一种方法,使可测试性与实际生产代码分离。
在单元测试中使用mocking抽象场景,为您想要测试的一个场景创建一个单独的版本,但不要将调试测试放到您为生产版本测试和编写的二进制代码中。这些调试测试只是对开发人员隐藏了可能的bug,因此直到过程的后期才能发现它们。
发布于 2016-09-30 20:57:20
这一点也很有用:
if (Debugger.IsAttached)
{
...
}https://stackoverflow.com/questions/3788605
复制相似问题