我想知道从Java代码到字节码的详细编译过程,例如一行Java代码如何转换为字节码,所以我想在Java编译器源代码中设置断点,但是我不知道如何做到这一点,是否有任何参考或步骤?
顺便说一句,我不是问如何使用Java调试器(显然我知道如何使用它),我的意思是如何调试Java编译器源代码而不是Java源代码。
你关于编译器如何工作的问题太宽泛了,在这里无法回答。去读一本标准的编译器教科书。
关于调试编译器:
我倾向于在编译器中大量使用断言(自我诊断)和大量的小型目标语言测试程序套件,这些测试程序专注于各种语言特性,可以自我验证它们的正确功能。(我的最后一个编译器在10年的时间里构建了大约1000个这样的测试程序,以及一个编译和运行它们的脚本)。通常,断言或测试的失败会提示我编译器哪里出了问题,仅仅通过检查就能识别出错误。我经常添加特殊的代码来转储关于编译器状态的关键信息,以及我可以使用特殊的未记录的命令行开关启用的活动跟踪。这些特殊的转储指示编译器在哪里出错,并且经常使代码检查能够识别错误的位置。
如果做不到这一点,我就使用我编写编译器的语言的调试器。
我不认为这些技术特别特别。当尝试处理任何大型、复杂的应用程序时,它们非常有用。