首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >#if DEBUG vs. s. Conditional("DEBUG")

#if DEBUG vs. s. Conditional("DEBUG")
EN

Stack Overflow用户
提问于 2010-09-24 23:34:08
回答 7查看 315K关注 0票数 465

在大型项目中,使用哪个更好,以及为什么:

代码语言:javascript
运行
复制
#if DEBUG
    public void SetPrivateValue(int value)
    { ... }
#endif

代码语言:javascript
运行
复制
[System.Diagnostics.Conditional("DEBUG")]
public void SetPrivateValue(int value)
{ ... }
EN

回答 7

Stack Overflow用户

发布于 2010-09-24 23:37:51

好吧,值得注意的是,它们的意思完全不同。

如果没有定义调试符号,那么在第一种情况下,SetPrivateValue本身将不会被调用...而在第二种情况下,它将存在,但任何未使用DEBUG符号编译的调用方都将省略这些调用。

如果代码及其所有调用方都在同一个程序集中,那么这种差异就不那么重要了--但这意味着在第一种情况下,您还需要在调用代码周围使用#if DEBUG

就我个人而言,我会推荐第二种方法--但你确实需要在头脑中保持它们之间的区别。

票数 67
EN

Stack Overflow用户

发布于 2010-09-25 00:09:12

我相信很多人不会同意我的观点,但作为一个构建人员,我经常听到“但它在我的机器上工作!”,我的立场是,你几乎不应该使用任何一个。如果您确实需要用于测试和调试,请找出一种方法,使可测试性与实际生产代码分离。

在单元测试中使用mocking抽象场景,为您想要测试的一个场景创建一个单独的版本,但不要将调试测试放到您为生产版本测试和编写的二进制代码中。这些调试测试只是对开发人员隐藏了可能的bug,因此直到过程的后期才能发现它们。

票数 45
EN

Stack Overflow用户

发布于 2016-09-30 20:57:20

这一点也很有用:

代码语言:javascript
运行
复制
if (Debugger.IsAttached)
{
...
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3788605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档