2013-12-13 12 views
10

特に、匿名関数がバイトコードに変換されるため、スカラスタックトレースは非常に複雑です。ここでは例です:"より良い"スカラスタックトレース

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) 

Iました(それはその一例です)stackifierを見つけたが、それはウェブページに貼り付けスタックトレースを維持するために面倒だから。コンソールに「より良い」スタックトレースを印刷する方法はありますか?

+0

スタックトレースはどのように複雑ですか?例外が発生した行が表示されます。 – vptheron

+0

@vptheronスタックトレースのポイントは、例外が発生した行を知るだけでなく、そこにどのように到達したかです。 "複雑な"は主観的です。私には、$$ anonfun $ go $ 2 $$ anonfun $ apply $ 2'は、私に有用な情報を教えてくれませんし、単純な 'flatMap'のトレースも5行もしません。スカラの内部をじっくり見ているのは確かに面白いですが、ほとんどの場合、何が間違っているのか理解しています*。高速。 – goncalopp

+3

技術的には、このScalaスタックトレースの問題は、Scalaスタックトレースではなく、Javaスタックトレースです。しかし、あなたを助けません。 –

答えて

4

のIntelliJ IDEAも、あなたはコードをデバッグしていない場合には、助け(とScalaのプラグインはコミュニティ版でも動作します):

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

はあなたにジャンプクリッカブルスタックトレースを取得します正しい場所。

ScalaIDEフォーラムで、ScalaIDEがこれを行うかどうかを尋ねました。 Mirco Dotta ninja-responded:

はい、そうですが、Eclipseで見つけるのが最も簡単な機能ではありません。あなたは、Emacsについて尋ねていませんが、誰かがチップくださいopen the "Java StackTrace Console"

する必要があります。

また、「不可解」の名前が(++ネームマングリングcを見に行く)ことを考慮してみてくださいあなたが支払う価格です柔軟性が増しました。

関連する問題