jdb调试scala代码的简单介绍

Posted 随缘补刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdb调试scala代码的简单介绍相关的知识,希望对你有一定的参考价值。

在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了。关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了。其实调试的大致流程都是一样的,只是需要注意一些细节的地方就可以了。下面就来简单说明一下。在这里关于scala和jdk的配置问题就不再详述了,下面进入正题吧。

 

首先放上调试用的scala代码hello.scala

object hello {
    def main(args: Array[String]): Unit = {
        println("Hello, world!")
        var a = 10
        var b = 20
        var c = a + b
        println(c)

        var d = 1 + a;
        if(d == 11) {
          println("aaaaaaaaa")
        }
    }
}

有了文件后需要通过下面的命令将其编译成虚拟机识别的字节流。关于scalac的参数可以通过scalac -help进行查看。

scalac -g:vars hello.scala  

命令执行后会发现目录下生成了两个文件:hello.class  hello$.class 

 

如果你同过java直接运行的话会出现如下的错误,这是因为你没有指定scala的jar包。

技术分享

 

如果你想通过java来运行的话指定了classpath也是可以的,这个对后面jdb调试scala是很重要的。

技术分享

 

 

当然通过scala hello是可以正确运行的。 当然你不手动编译生成字节流文件直接运行scala hello.scala也是可以的。

 

技术分享

不知道什么原因导致在linux上通过scala hello.scala会崩溃。我怀疑可能是我机器的内存太小导致的,因为是使用的vps的memory只有512M!!!。不过scala hello.scala在win上运行是可以通过的。

 

以上都是准备工作现在是到了调试的时候了。

技术分享

 

技术分享

图中的差异请自行补脑,因为我自己也没怎么搞清楚,貌似是scala中的object造成的。 有熟悉这个的话希望大家能下来后多多交流,在这里表示感谢了哈。

有兴趣的话可以去http://scala-language.1934581.n4.nabble.com/debugging-scala-programs-td1943959.html看下Chris Waterson的评论。

 

因为是第一次写博客心里也没有谱,有问题的地方请大家指正。格式比较丑陋,大家多多包涵哈!^_^

 

以上是关于jdb调试scala代码的简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

Java逆向基础之JDB动态调试

解决JAVA单步调试键盘输入被JDB占用的问题

面试常用的代码片段

jdb - The Java Debugger

使用 simple-build-tool (sbt) 和 IntelliJ 调试 Scala 代码

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?