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

时间:2016-11-17 06:52:20

标签: java java-compiler-api

我想知道从Java代码到字节码的详细编译过程,比如一行Java代码如何转换为字节码,所以我想在Java编译器源代码中设置断点,但是我不知道知道如何做到这一点,是否有任何参考或步骤?

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

1 个答案:

答案 0 :(得分:2)

关于编译器如何工作的问题太广泛了,无法在此回答。去阅读标准的编译器教科书。

关于调试编译器:

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

我经常添加特殊代码来转储有关编译器状态的关键信息以及我可以使用特殊的未记录的命令行开关启用的活动跟踪。这些特殊转储表明编译器误入歧途,并且经常启用代码检查以识别错误的位置。

如果不这样做,我会使用调试器来编写编译器的语言。

我不认为这些技术特别特别。在尝试使用任何大型复杂应用程序时,它们非常有用。