“更好”的scala堆栈跟踪

时间:2013-12-13 12:09:09

标签: scala stack-trace

Scala堆栈跟踪非常复杂,特别是因为匿名函数转换为字节码的方式。这是一个例子:

java.lang.IllegalStateException
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply$mcII$sp(IdentityVerifier.scala:19)
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply(IdentityVerifier.scala:17)
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply(IdentityVerifier.scala:17)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at com.company.IdentityVerifier$$anonfun$go$2.apply(IdentityVerifier.scala:17)
    at com.company.IdentityVerifier$$anonfun$go$2.apply(IdentityVerifier.scala:16)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
    at com.company.IdentityVerifier$.go(IdentityVerifier.scala:16)
    at com.company.UserMap.setLastUserId(UserMap.scala:12)
    at com.company.UserConsumer.setCurrentUser(UserConsumer.java:69)
    at com.company.UserConsumer.consume(UserConsumer.java:64)
    at com.company.UserProducer.execute(UserProducer.java:19)
    at com.company.UserCreator.execute(UserCreator.java:18)
    at com.company.UserCreatorMain$1.run(UserCreatorMain.java:37)
    at com.company.UserCreatorMain.main(UserCreatorMain.java:51)

我已经找到stackifier(这是他们的例子),但是将堆栈跟踪粘贴到网页上很麻烦。有没有办法在控制台上打印“更好”的堆栈跟踪?

1 个答案:

答案 0 :(得分:4)

Intellij IDEA有帮助,即使在你没有调试代码的情况下(scala插件甚至可以在社区版本中工作):

http://www.jetbrains.com/idea/webhelp/analyzing-external-stacktraces.html

你得到一个可点击的堆栈跟踪,跳转到正确的位置。

我在ScalaIDE论坛上询问ScalaIDE是否也这样做。 Mirco Dotta忍者响应:

  

是的,但它不是在Eclipse中找到的最简单的功能。您需要open the "Java StackTrace Console"

没有询问有关emacs的信息,请有人填写。

此外,请尝试考虑“隐藏”名称(请参阅c ++名称修改)是您为增加灵活性而付出的代价。