带有调试信息编译的Java程序不应该在生产系统中使用吗?

问题描述 投票:0回答:5

是否有任何理由我应该避免在我的 Java 类中使用 Javac 编译调试信息以便在生产服务器中使用?有什么我应该注意的速度或安全问题吗?

请注意,我指的是调试信息,例如堆栈跟踪中的行号,而不是记录器的调试级别。


相关问题:

java debugging javac
5个回答
8
投票

您的意思是使用调试选项进行编译吗? Javac 调试打开和关闭之间有性能差异吗?


5
投票

作为一名开发人员,我建议您保留尽可能多的内容。 道理是什么?

有一天,你会在程序中遇到一个错误,其中唯一的信息是堆栈跟踪,并且该错误无法通过命令重现,这是原始程序员完全没有预料到的,这是你的工作修复它。 堆栈跟踪中提供的信息越多越好! 保留所有调试信息!

如果可以,请使用日志记录框架(将堆栈跟踪获取到文件),它可以提供有关在其中找到每个类的 jar 文件的信息。 Logback 可以做到这一点,我相信 log4j 也可以。

您可能不被“允许”包含所有这些信息,但我相信您应该首先大喊大叫,并说出于应急原因应将其保留。 就性能而言,我相信自从 HotSpot 以来它就不再重要了。


3
投票

如果您真的担心方法的名称可见,您可以使用

ProGuard

或其他一些混淆器。 ProGuard 有一个很好的特性,它可以对堆栈跟踪进行反混淆,因此客户仍然可以将它们发送给您。 混淆并不完美,所以如果你不想花功夫,不做也没什么问题。


0
投票

您也可以随时使用预处理器来消除代码。


0
投票
需要

日志信息来找出发生了什么。 断言语句也不是那么大的问题,当然除非是在对性能非常敏感的代码中。您应该能够完全忽略它们,因为断言语句通常用于检查不可能发生的事情(如果使用正确)。但是,尽管麻烦不大,但把他们救出来并不是真的必要。

我个人认为,在生产中安装的软件应该尽可能接近开发软件,因为它已经过最频繁的测试。

© www.soinside.com 2019 - 2024. All rights reserved.