了解java调试如何真正起作用

时间:2014-03-23 17:22:35

标签: java debugging jvm jdb

我的问题与调试有关 - 特别是在java / jvm上。

我想知道java中的调试是如何工作的:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

这就是为什么,如果您的运行时类路径与源文件不同步(即错误的&#39; jar / .class文件位于运行时类路径中),调试器有时会显示错误的行数字,甚至是看似不可执行的行号。这是“坏”的经典签名。运行时类路径问题(或至少源和编译代码之间的不一致)。

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