2013-12-13 5 views
10

Трассировки стека Scala, как известно, сложны, особенно из-за того, как анонимные функции переводятся в байт-код. Вот пример:«Лучше» трассировки стека 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 (это их пример), но это громоздко, чтобы стек склеивание следы на веб-страницу. Есть ли способ распечатать «лучшие» трассировки стека на консоли?

+0

Как устроен комплекс трассировки стека? Он сообщает вам, где произошло исключение. – vptheron

+0

@vptheron Точка трассировки стека должна знать не только о линии, где произошло исключение, но также и о том, как она там *. «Комплекс» в основном субъективен - мне «$$ anonfun $ go $ 2 $$ anonfun $ apply $ 2' не говорит мне никакой полезной информации, ни 5 строк трассировки для простой« flatMap ». Хотя, конечно, интересно взглянуть на внутренности scala, большую часть времени я бы лучше понял, что пошло не так. *. Быстро. – goncalopp

+3

Технически проблема с трассировкой стека Scala заключается в том, что это не трассировка стека Scala, это трассировка стека Java. Не помогает. –

ответ

4

IntelliJ IDEA помогает, даже в случае, если вы не отладки кода (и Scala плагин должен работать даже с версией сообщества):

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

Вы получаете интерактивными трассировки стека, который прыгает в в нужном месте.

Я спросил на форумах ScalaIDE, делает ли это ScalaIDE тоже. Mirco Dotta ninja-ответил:

Да, но это не самая простая функция для поиска в Eclipse. Вы должны open the "Java StackTrace Console"

Не задан вопрос о Emacs, кто-то пожалуйста, скинуться.

Кроме того, пожалуйста, постарайтесь учесть, что «загадочные» названия (пойти посмотреть на C++ имя коверкая) является цена, которую вы платите за добавлена ​​гибкость.

Смежные вопросы