Подтвердить что ты не робот

Как распечатать все исключения java на терминале?

Я заметил, что всякий раз, когда на терминал возникает исключение, я часто получаю сокращенную трассировку сбоя, такую ​​как:

java.lang.NoClassDefFoundError: javafx/application/Application
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 13 more
Exception in thread "main" 

Я хочу знать, как распечатать всю трассировку, в том числе ... 13 more.

EDIT: эта почта была идентифицирована как возможный дубликат Печать полного стека вызовов на printStackTrace()?. Я прочитал последнее, но не нашел ответа на мой вопрос, я только нашел информацию о том, почему это происходит.

4b9b3361

Ответ 1

Вы можете передать объект Throwable (Exception в вашем случае) следующему методу:

static void printFullTrace(Throwable throwable){
    for(StackTraceElement element: throwable())
        System.out.println(element);
}

Истина заключается в том, что вы уже видите целую трассировку стека в этих строках, потому что часть ее повторяется и поэтому опущена для краткости. Вы можете лучше понять механизм здесь.

Ответ 2

StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraces) {
    System.out.println(element);
}

Ответ 3

Вы можете распечатать все трассировки стека методом ниже. Чтение Java Doc для printStackTrace подскажет, почему это разработано таким образом.

void printAllTraces(Throwable throwable) {
       StackTraceElement[] stackTraces = throwable.getStackTrace();
       for (StackTraceElement stackTrace: stackTraces) {
          System.out.println(stackTrace); 
       }
}

Ответ 4

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

Лично я использую cmder, которого нет в списке, но вы должны проверить их все и заглянуть, которые вам подходят.