代码之家  ›  专栏  ›  技术社区  ›  James McMahon

编译程序中编译的Java程序不应该用于生产系统吗?

  •  11
  • James McMahon  · 技术社区  · 6 年前

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

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


    相关问题:

    5 回复  |  直到 11 年前
        1
  •  8
  •   Community CDub    7 年前
        2
  •  5
  •   om-nom-nom Dennis Williamson    11 年前

    作为一名开发人员,我建议尽可能多地留下来。推理?

    有一天,你会在程序中遇到一个错误 只有 您所拥有的信息是一个堆栈跟踪,而这个bug不能通过命令进行复制,这完全是原始程序员所没有预料到的,修复它是您的工作。该堆栈中的可用信息越多,跟踪效果越好!保留所有调试信息!

    如果可以,那么使用一个日志框架(获取一个文件的堆栈跟踪),该框架可以提供关于在其中找到每个类的JAR文件的信息。logback可以做到这一点,我相信log4j也可以。

    你可能不是 允许 包括所有这些信息,但我相信你应该先大喊大叫,说它应该留在应急原因。

    我相信,从热点开始,它就不重要了。

        3
  •  3
  •   Adam Goode    15 年前

    如果您指的是线号信息,用于打印堆栈跟踪,那么通常最好保持这一点。客户可以将堆栈跟踪粘贴到bug报告中,供您使用。

    如果您真的担心方法的名称是可见的,那么可以使用 ProGuard 或者其他一些模糊的东西。Proguard有一个很好的特性,它可以消除堆栈跟踪的混淆,所以客户仍然可以将它们发送给您。

    模糊并不是完美的,所以如果你不想花费精力,那么不这样做没有什么错。

        4
  •  0
  •   Drew    15 年前

    取决于调试的过度性和程序的性能敏感性。90%的调试水平适中的用户不必担心。

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

        5
  •  0
  •   extraneon    15 年前

    我同意Balusc的观点,生产中的日志级别通常可以在生产中设置得比在测试中更高(输出更少)。我认为完全清除伐木会适得其反。即使在生产代码中也会发生错误, 需要 记录信息以了解发生了什么。

    断言语句也不是什么大问题,当然除非是在一段性能非常敏感的代码中。您应该能够完全忽略它们,因为断言语句通常用于检查不能发生的事情(如果使用正确的话)。但是,尽管困难很小,但把他们弄出去并不是真正必要的。

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