我的问题与调试有关 - 特别是在java / jvm上。
我想知道java中的调试是如何工作的:
jdb/jvm
如何将<源代码中设置的断点与当前正在执行的字节码相匹配。 有人可以回答上述问题和/或指出与jvm调试相关的文档/规范及其工作原理吗?
答案 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可能最终会为您打印。