jvm 了解java调试实际上是如何工作的

sqxo8psd  于 2023-01-17  发布在  Java
关注(0)|答案(1)|浏览(125)

我的问题与调试有关--尤其是在JVM上的java/中。
我想知道java中的调试是如何工作的:

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

有没有人能回答上面的问题和/或给我指一下与jvm调试相关的文档/规范以及它是如何工作的?

nsc4cvqm

nsc4cvqm1#

查看javac文档,网址为:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
特别是,默认情况下,javac或使用显式的-g选项(及其派生)将原始源文件和行号存储在.class文件中,Java调试器在运行时执行字节码时能够检索这些信息,并将其与源代码匹配。
这就是为什么,如果你的运行时类路径和你的源文件不同步(例如,错误的jar / .class文件在运行时类路径中),调试器有时会显示错误的行号,甚至是看起来不可执行的行号。这是一个典型的错误运行时类路径问题的标志(或者至少是源代码和编译代码之间的不一致)。

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

相关问题