【发布时间】:2011-02-22 13:16:30
【问题描述】:
我似乎在谷歌上找不到任何东西告诉我为什么会这样以及解决方案是什么。我正在单步执行第三方代码(我有源代码),并且真的很想看到当前正在执行的行...
查看 javac 编译标志,我看到 -g:none 标志。如果设置了这个标志,这是否足以解释为什么我看不到行号?如果是这样,为什么有人会这样做,是否有性能影响?我是否需要自己重新编译 jar 以附加缺少的调试信息(如果可能)?
谢谢!
【问题讨论】:
我似乎在谷歌上找不到任何东西告诉我为什么会这样以及解决方案是什么。我正在单步执行第三方代码(我有源代码),并且真的很想看到当前正在执行的行...
查看 javac 编译标志,我看到 -g:none 标志。如果设置了这个标志,这是否足以解释为什么我看不到行号?如果是这样,为什么有人会这样做,是否有性能影响?我是否需要自己重新编译 jar 以附加缺少的调试信息(如果可能)?
谢谢!
【问题讨论】:
查看 javac 编译标志,我看到 -g:none 标志。如果设置了这个标志,这是否足以解释为什么我看不到行号?
是的,这就是原因。
如果是这样,为什么有人会这样做?
也许图书馆的作者想让他的罐子尽可能小。如果不使用-g:none 开关进行编译,性能不会有太大差异。
【讨论】:
我想这会影响性能,但调试信息肯定会使你的类文件变大。所以这是另一个动机。
此外,想要保护其源代码的公司通常不会编译调试信息以降低反汇编(逆向工程)对如此积极的人的价值(这与一些公司混淆其字节码的原因相同)。
很明显,如果您可以使用来源,那么上述观点是无关紧要的。如果代码是开源的,那么您自己编译库应该不会有太多麻烦(毕竟,每个其他贡献者都需要能够做到这一点!)。是的,这是您目前最好的选择。
【讨论】: