2009-07-11 39 views
6

我通常在我的工作机器上本地测试我的代码,然后将其移至开发环境,最后移至生产环境。在这种情况下使用调试/发布模式的最佳方式是什么?我只需要关心我的机器中的调试模式?我应该发布调试模式还是发布模式?我知道我应该使用发布模式发布到制作。我之前没有真正关注过这一切,所以我一直只在调试模式下工作,我知道我不应该这样做。我应该如何在Visual Studio中使用调试/发布模式?

编辑:谢谢你的答案。看起来在我自己的机器上只使用调试模式是个好主意。即使它在开发机器中,它基本上向公众发布(同事,qa),因此它应该处于发布模式。当然,释放到产品时它应该是释放模式。

回答

12

发布/发布应用程序时,应该在发布模式下这样做。发布模式就是为了发布应用程序。生成的代码通常更具性能,并且许多代码会删除更多与应用程序开发阶段相关的检查。

在典型的一天,你应该在调试模式下开发。大多数语言将额外的检查插入调试模式应用程序。这些发现更多的错误,但往往会减慢应用程序的一点。

然而,你也必须做的释放模式siginificant测试作为开发过程的一部分。客户将只能看到产品的发布模式版本,并且可能会将错误设置为特定的调试/发布模式。在调试模式下插入的错误检查会引入副作用,从而隐藏应用程序中的实际错误。

+0

@JaredPar“在调试模式下插入的错误检查会引入副作用,从而隐藏应用程序中的实际错误。” - 你能详细说明吗? – TGnat 2009-07-11 17:49:06

+3

@TGnat,有明显的情况检查改变全局状态(邪恶,但存在)。更微妙的是,简单的运行检查会改变应用程序的时间。我看到很多线程问题,其中昂贵的调试模式通过在DEBUG模式下使一个线程花费比RELEASE模式更长的时间来检查隐藏的时间问题。这允许其他线程达到完成状态并给出正在运行的应用程序的外观。一旦检查在RELEASE模式下被移除,线程运行得更快并且暴露出竞态条件。 – JaredPar 2009-07-11 17:57:18

3

总的来说,始终将Release版本部署到生产环境。调试会增加装配重量并降低性能。

如果您正在开发ASP.NET应用程序,实际上就离开调试模式将改变/当你的页面由JIT编译器编译和显著降低性能,以更好地添加交互式调试能力。

至于要部署到开发中的哪个构建...如果您针对开发运行单元测试,那么部署Debug构建可能是一个好主意,这样您可以在测试失败或发生异常时获取最多的调试信息。但是,希望有一个额外的测试或预生产环境,您可以在其中执行集成测试并执行手动测试。 Testing/Pre-Prod环境应该明确地使用Release版本,以便在进入Production之前查看真实的性能和编译问题。

如果你没有这个中间测试/预PROD的水平,那么我建议你运行环境,开发与发行。换句话说,在发布配置中,您应该在生产之前至少运行一个级别。

有关您可以用配置做什么更多的信息,我有一个博客帖子专门为Silverlight(http://blog.tonyheupel.com/2009/04/environment-specific-service-references.html)。在这里有一篇关于Scott Hanselman关于构建配置和不同环境的更一般文章的链接。

2

默认情况下,发布版本将与更多的优化编译开关上,这将导致更快和更小的代码,通常是要释放给客户提供什么(因此得名)。牛逼

他调试版本确实几乎没有优化,这意味着使用调试器时,底层机器代码更紧密地对应于源代码,调试助攻。此外,默认情况下,调试版本会插入额外的运行时代码检查,以检查常见错误,如访问未经初始化的阵列成员。

请注意,您可以使用调试符号构建发布版本,调试器将机器代码中的当前语句映射到适当的源代码行更加困难。

6

我遵循这个方法:

  • 代码/调试周期我的工作站上:DEBUG
  • 运行我的工作站上的单元测试:我的工作站上DEBUG
  • 分析:发行
  • 一夜之间建立和自动化测试:RELEASE(执行无人值守安装)
  • QA团队进行的动手测试:RELEASE

所有测试必须至少在发布版本上进行,因为这是您要发布的内容。对调试构建进行剖析通常是毫无意义的(特别是在C++中),因为调试堆有许多额外的检查,这些检查完全改变了典型应用程序的性能配置文件。

相关问题