使用调试模式而不是发布模式将应用程序部署到生产?

时间:2010-10-28 14:37:25

标签: c# .net vb.net deployment

我在一家商店工作,维护一个相当新的应用程序。该应用程序仍有其公平的错误,每天都有大量的门票。我们使用这些票据给出的错误信息没有它可能有用,因为应用程序是在发布模式下编译的,我读到的更小更快(有意义)。

将.NET应用程序部署到以调试模式编译的生产是否有任何后果?我希望它会慢一点,但我已经看到差异是名义上的。这可以向我们保证,当我们在故障单上出现错误时,我们会有与这些错误相关联的行号,这当然会使调试变得更加容易。

任何会阻止你这么做的重大危险信号?我的任务是研究这种可能性。所以感谢任何反馈。

6 个答案:

答案 0 :(得分:3)

在DEBUG而不是Release模式下部署您的应用会降低您的性能。当然可以做出妥协。我会建议以下之一:

  • 查看为global.asax中的OnError添加全局错误处理程序 -
  • 查看类似于this的妥协,Scott Hanselman建议

答案 1 :(得分:1)

我的经验是,如果您正在考虑桌面(winforms / WPF)应用程序,这可以正常工作,但在任何情况下都不应该尝试使用asp.net应用程序。

答案 2 :(得分:1)

您标记了此[vb.net],您无法发送使用WithEvents的调试版本或程序。如果没有连接调试器,WeakReference实例会有一个已知的afaik未解决的内存泄漏。它们用于支持编辑+继续。

您可以做的第一件事就是将.pdb文件与您的应用一起发送。在C#IDE中,使用Project + Properties,Build选项卡,Advanced,将Debug Info更改为“Full”。您将在异常堆栈跟踪中获取行号信息。

您不能完全信任行号,JIT优化器会移动代码以使其执行得更快。内联短函数,如属性getter。您可以在与禁用JIT优化程序的可执行文件相同的目录中添加yourapp.ini file

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

答案 3 :(得分:0)

这一切都取决于您的生产环境,业务和性能要求的重要性。没有什么是严格的。

答案 4 :(得分:0)

部署Debug版本对我来说是一个红旗,虽然它并非闻所未闻。这是桌面还是服务器应用程序?任何失败的Debug.Assert调用都可能是一个问题,因为那些可以关闭你的应用程序和/或导致调试器连接(VS.NET不是唯一的调试器,如果我记得.net fx安装了一个轻量级的调试器) 。虽然这对于开发者来说可能有所帮助,但它肯定会让正常人感到困惑。

一个运行良好的选项不是调试版本,而是确保您的错误报告机制包括(显示或记录)任何抛出的exceptions的堆栈跟踪信息。这有助于在不需要pdbs的情况下很好地查明错误。

答案 5 :(得分:0)

如果这是一个桌面应用程序,您可以与少数客户一起尝试,但请注意其他答案中给出的建议。尝试更多强力用户或有很多问题的人可能愿意做志愿者。