将开发快捷方式放在#if DEBUG块中是不是一个坏主意?

Bob*_*ise 11 c# debugging

在我们的代码中的一些地方,我们使用#if DEBUG块来简化开发.像:

#if DEBUG
   serverIP = localhost;
#else
   serverIP = GetSetting()
#endif
Run Code Online (Sandbox Code Playgroud)

要么

private bool isLicensed()

#if DEBUG
   return true;
#endif

return CheckSetting()
Run Code Online (Sandbox Code Playgroud)

还有一些地方我们做了这样的化妆品改变:

#if DEBUG
   background = humorousImage.jpg
#else
   background = standardColor
#endif
Run Code Online (Sandbox Code Playgroud)

依赖#if debug来简化开发是否危险?如果是,#if debug的有效用途是什么?

SLa*_*aks 11

这样做的问题在于它使你更容易发现错误#else.

通常,您的调试版本应与发布版本尽可能相似.


小智 9

理想情况下,我认为您会将这些设置移动到配置文件,并保留#IF Debug指令以进行测试,记录和其他"调试"任务.此外,请记住,您需要提供"调试"构建的客户代码现在将完全不同.我的两分钱.


leo*_*onm 8

这是一个非常糟糕的主意.如果您正试图捕获生产错误,那么调试条款肯定会在某个阶段或其他阶段绊倒您.您希望尽可能接近生产中运行的代码.在您的示例中,您永远无法在CheckSetting()中找到错误

根据事物的外观,你的代码太紧密耦合了.你想要做的是让模块/类减少对彼此的依赖,并练习测试驱动开发.另请参阅控制反转(又称依赖注入).

有效地使用遗留代码有一些有关如何引入TDD的有用见解.它还有一些关于如何在各种场景中进行TDD的非常好的指针,在这些场景中可能很难测试.


Wil*_*l A 6

我不能说这是一件我热衷于做,亲自 - 我在一个环境中工作,在那里我们主要的应用程序(部署到400+用户)有60个+模块 - 与5个开发工作的项目和释放模块,你只是知道有人会不小心发布一个调试模块.:)

  • 听起来你需要一个自动构建,所以你不会发布在个人开发工作站上构建的文件. (2认同)