Ash*_*ary 3 debugging jvm scala
我想知道当我调试Scala代码而不是Java代码时它与调试器(Intellij IDEA + Scala插件)有什么不同.根据我的理解,调试器与语言紧密耦合,即Java调试器无法处理Scala代码,但显然JVM是这里的关注焦点,只要它是字节码,任何调试器都可以.对 ?
重要更新:问题是举例说明字节码调试器如何限制Scala.假设达到了一个断点,我不想转到下一行,但我希望调试器在应用程序的上下文中评估Scala表达式(例如,我喜欢从单例对象调用一个运算符方法).调试器被卡住了,因为它无法理解Scala.我必须自己进行转换并将生成的Java输入到调试器.问题是只能在字节码级别处理"断点东西".如果你想表达一个表达式怎么办?调试器必须了解Scala来评估观察到的表达式,对吧?这次我确定我是对的.复仇是我的,耶和华说;-)
简短回答你的假设是错误的.
原因是调试器不关心你的调试语言.它在断点处停止,而断点又包括特定源文件的行.请注意,源文件只是供您阅读的文本 - 调试器永远不会扫描源文件.如果您将源文件所在的位置更改为右侧目录中的文本文件w /正确的文件名作为已设置的断点,则调试器将在断点发生时愉快地显示它.每当你设置一个断点时,你的ide就会告诉调试器你会扫描这个类,看看这行上的任何字节码,当你点击它时就停止.如果您的ide尝试将同一文本文件编译到类文件中,这当然不起作用 - 但是如果您创建伪文本文件作为jar文件的源并执行源文件映射操作,它将起作用.
如果考虑一下,编写一个简单的模板并在支持调试的同时进行编译并不困难.只需使用asm来创建所有的print语句,并告诉asm这个print语句来自这行的模板文件.之后,您可以添加更多聪明的东西,同时保持可调试性.
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |