ASP.NET 3.5:在生产环境中使用debug=true是否有明显的优势?

ASP.NET 3.5:在生产环境中使用debug=true是否有明显的优势?,asp.net,debugging,Asp.net,Debugging,所有答案都指向“不!”。然而,有些人说,当服务器上发生错误时,启用调试是很方便的。我不知道他们这是什么意思。人们真的调试实时服务器代码吗?我真的不知道你能。在我工作的网站上,我们使用ELMAH进行错误报告。当服务器发生错误时,我们会收到一封完整的堆栈跟踪电子邮件。在大致了解错误发生的位置和方式后,我将打开包含当前部署到生产环境中的所有代码的本地解决方案,并在本地进行调试。我从来没有在服务器上调试过代码,所以我不知道人们这么说是什么意思 我这样问是因为我今天在整合web.config XML时发现

所有答案都指向“不!”。然而,有些人说,当服务器上发生错误时,启用调试是很方便的。我不知道他们这是什么意思。人们真的调试实时服务器代码吗?我真的不知道你能。在我工作的网站上,我们使用ELMAH进行错误报告。当服务器发生错误时,我们会收到一封完整的堆栈跟踪电子邮件。在大致了解错误发生的位置和方式后,我将打开包含当前部署到生产环境中的所有代码的本地解决方案,并在本地进行调试。我从来没有在服务器上调试过代码,所以我不知道人们这么说是什么意思


我这样问是因为我今天在整合web.config XML时发现,在登台和生产环境的web.config文件中存在debug=true。这肯定已经有几年了,我想知道关闭它会给我们带来什么好处。在项目开始后的两年多时间里,如果关闭调试,任何可能会中断的调试都可能依赖于打开调试吗?

关闭调试应该没问题,您应该会得到一点性能提升。听起来你用ELMAH做的事情是对的。我想不出一个好的理由,为什么你想在生产中打开它。。。希望对您有所帮助。

所有的
系统。诊断库都依赖于此标志。如果不使用任何此函数,则可能看不到任何直接效果,但要查看来自调试函数的其他效果和消息,您至少需要监视windows日志文件

如果未将调试标志设置为off,则
Debug.Assert
Debug.Fail
等函数仍处于活动状态,并会影响性能,如果不检查windows系统日志文件,可能会产生一些您永远看不到的小问题

在我们的库中,它们充满了assert,调试标志是至关重要的

此外,如果“调试”标志处于启用状态,则编译器可能不会进行也会影响性能的优化。

人们谈论的“优点”是,当站点发生错误时,默认的asp.net错误页面将显示失败的实际代码行。如果debug=false,则不会看到任何该信息。我认为大多数推荐这种方法的人要么不知道像ELMAH这样的日志框架(因此,如果没有它,就很难在站点上找到错误的原因),要么在项目开始时在安装/测试站点时将其留在了生产机器上,然后忘记了以后对其进行更改


然而,有了适当的日志框架,您仍然可以在幕后获得良好的错误信息,而无需以这种方式向最终用户展示。事实上,您不想向最终用户显示此类信息,因为a)他们不知道这意味着什么,b)如果显示代码的敏感方面(可能有助于某人发现漏洞的信息),则可能会出现安全问题。你有每次都有最新文件的优点,也有每次都有最新文件的缺点


其他第三方压缩/组合类型模块通常也是如此,因为调试非小型javascript等更容易,所以它们通常只有在禁用调试后才能正常运行。

我想我真正想知道的是人们说在生产环境中打开它时的意思在站点发生错误时的便利性。有这样的便利吗?如果是这样的话,那么从技术上讲,打开它至少会有一些好处,尽管会以性能为代价。@user701346:我猜他们会这么说,因为这样可以让您将调试器附加到部署到生产环境的应用程序上。然而,如果你发现自己在“老兄……我希望我能参与制作”的话,有些事情已经出了可怕的问题。你可能也会感兴趣,以防你和那些认为这是个好主意的人进行讨论。他基本上是在管理团队,这些团队构建了所有这些东西,因此值得听取这些建议。他还链接到一篇博文,该博文更详细地解释了为什么这是一个坏主意。