它是调试器对我正在调试的Scala代码有影响吗?

Ash*_*ary 3 debugging jvm scala

我想知道当我调试Scala代码而不是Java代码时它与调试器(Intellij IDEA + Scala插件)​​有什么不同.根据我的理解,调试器与语言紧密耦合,即Java调试器无法处理Scala代码,但显然JVM是这里的关注焦点,只要它是字节码,任何调试器都可以.对 ?

重要更新:问题是举例说明字节码调试器如何限制Scala.假设达到了一个断点,我不想转到下一行,但我希望调试器在应用程序的上下文中评估Scala表达式(例如,我喜欢从单例对象调用一个运算符方法).调试器被卡住了,因为它无法理解Scala.我必须自己进行转换并将生成的Java输入到调试器.问题是只能在字节码级别处理"断点东西".如果你想表达一个表达式怎么办?调试器必须了解Scala来评估观察到的表达式,对吧?这次我确定我是对的.复仇是我的,耶和华说;-)

mP.*_*mP. 8

简短回答你的假设是错误的.

原因是调试器不关心你的调试语言.它在断点处停止,而断点又包括特定源文件的行.请注意,源文件只是供您阅读的文本 - 调试器永远不会扫描源文件.如果您将源文件所在的位置更改为右侧目录中的文本文件w /正确的文件名作为已设置的断点,则调试器将在断点发生时愉快地显示它.每当你设置一个断点时,你的ide就会告诉调试器你会扫描这个类,看看这行上的任何字节码,当你点击它时就停止.如果您的ide尝试将同一文本文件编译到类文件中,这当然不起作用 - 但是如果您创建伪文本文件作为jar文件的源并执行源文件映射操作,它将起作用.

如果考虑一下,编写一个简单的模板并在支持调试的同时进行编译并不困难.只需使用asm来创建所有的print语句,并告诉asm这个print语句来自这行的模板文件.之后,您可以添加更多聪明的东西,同时保持可调试性.