如何调试 Java 编译器源代码 (Javac) 本身?

How to debug the Java compiler source code (Javac) itself?

我想知道从Java代码到字节码的详细编译过程,比如一行Java代码是如何翻译成字节码的,所以我想在Java 编译器源代码,但是我不知道该怎么做,是否有任何参考或步骤?

顺便说一句, 我不是问如何使用 Java 调试器(显然我知道如何使用它),我的意思是如何调试 Java 编译器源代码而不是 Java 源代码。

你关于编译器如何工作的问题过于宽泛,无法在这里回答。去读一本标准的编译器教科书。

关于调试编译器:

我倾向于在编译器(自我诊断)中大量使用断言和大量小型目标语言测试程序,这些程序侧重于自我验证其正确运行的各种语言功能。 (我的最后一个编译器在 10 年的时间里构建了大约一千个这样的测试程序,以及一个编译脚本和 运行 它们)。通常,断言或测试的失败会提示我编译器的错误所在,而仅通过检查就能识别出错误。

我经常添加特殊代码来转储有关编译器状态的关键信息和活动痕迹,我可以使用特殊的未记录的命令行开关启用这些信息。这些特殊的转储指示编译器在哪里误入歧途,并且通常再次启用代码检查以识别错误的位置。

如果做不到这一点,我将调试器用于编写编译器所用的语言。

我不认为这些技术有什么特别之处。它们在尝试处理任何大型、复杂的应用程序时很有用。