5

我的问题与调试有关——尤其是在 java/jvm 上。

我想知道如何在 Java 中进行调试:

  • 如何将java源代码中设置的断点jdb/jvm匹配到当前正在执行的字节码。

有人可以回答上述问题和/或指出与 jvm 调试相关的文档/规范及其工作原理吗?

4

1 回答 1

3

查看 javac 文档: http ://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

特别是,默认情况下,javac 将-g在 .class 文件中存储原始源文件和行号,或者使用显式选项(及其派生项)。Java 调试器将能够在运行时执行字节码时检索该信息,并将其与您的源代码相匹配。

这就是为什么,如果您的运行时类路径与源文件不同步(即“错误”的 jar / .class 文件位于运行时类路径中),调试器有时会显示错误的行号,甚至显示不正确的行号似乎无法执行。这是“坏”运行时类路径问题的典型特征(或者至少是您的源代码和编译代码之间的不一致)。

[已编辑]从技术上讲,您可以使用 .class/.jar 文件来减小大小-g:none,但实际上这通常是对磁盘空间的一种很好的利用,因为源/行号信息对两者都非常方便调试器,以及 JVM 可能最终为您打印的堆栈跟踪。

于 2014-03-23T17:44:22.247 回答