Как получить трассировку стека исключения в Scala для его печати? - PullRequest
8 голосов
/ 25 октября 2010

В моей программе я хотел бы перехватить все исключения и явно распечатать их (чтобы иметь возможность продолжить, наконец, продолжая видеть исключения).

Итак, я попробовал это:


try {
  ...
}
catch {
  case ex : Exception => {
    println ("\n" + ex)
    println ("\n" + ex.getStackTrace + "\n")
  }
}
finally {
  ...
}

Но это (с использованием getStackTrace) само по себе вызывает "java.lang.OutOfMemoryError: PermGen space".Что я делаю неправильно?Я уверен, что у меня достаточно свободной памяти кучи JVM, прежде чем я получу ее (поскольку я пытался вызвать исключение в самом начале программы).

Ответы [ 2 ]

4 голосов
/ 25 октября 2010

Я думаю, что вы должны опубликовать точный, автономный рабочий пример этого, потому что это работает для меня, используя 2.8.0 (то есть вообще не имеет проблем с памятью):

scala> def foo( f : () => Unit) : Unit = try {
     | f()
     | } catch { case e : Exception => println("H" + e.getStackTrace) }
foo: (f: () => Unit)Unit

scala> foo(() => throw new NullPointerException)
H[Ljava.lang.StackTraceElement;@30a4effe

Интересно, есть ли у вас исключение , которое является его собственным cause? И наоборот, это может быть случай, когда ваша программа работает на очень мало памяти ( 32Mb по умолчанию на машине клиентского класса, кстати, ), и у вас очень глубокий стек ( не редкость в скалах!)

1 голос
/ 25 октября 2010

Звучит так, будто вам нужно выделить больше места для пермгена.В Java вы делаете это с аргументом JVM:

-XX:MaxPermGen=256m

Вы можете установить аргументы JVM для использования в Scala, установив переменную среды:

JAVA_OPTS="-XX:MaxPermGen=256m"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...