2015-07-24 14 views
13

Zauważyłem, że gdy jest wyjątek na terminalu, często pojawia się ślad awarii skracać takie jak to:Jak wydrukować wszystkie wyjątki Java na terminalu?

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" 

Co chcę wiedzieć, w jaki sposób wydrukować wszystkie śladu, w tym ... 13 more.

EDYCJA: Ten post został zidentyfikowany jako możliwy duplikat Print full call stack on printStackTrace()?. Przeczytałem to drugie, ale nie znalazłem odpowiedzi na moje pytanie, znalazłem tylko informację o tym, dlaczego tak się dzieje.

+0

Właściwie .. będzie drukować Entier rzeczy .. co jest zatrzymanie tu jest konsola ... Wzrost strony linii konsoli (lub zrobić to bez ograniczeń), a następnie dostaniesz enterire listy –

+4

duplikat: http://stackoverflow.com/questions/1043378/print-full-call-stack-on-on-printstacktrace – chengpohi

+0

A jak mogę wprowadzić te zmiany do mojej konsoli @PavanKumarK? Używam Win7, nawiasem mówiąc, być może jest to istotne dla pytania. – Maslor

Odpowiedz

4

Można przekazać obiekt Throwable (The Exception w danym przypadku) sposobu jak ten:

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

Prawda jest taka, że ​​są już widząc cały ślad stosu w tych liniach, ponieważ część jest powtarzany i tak opuszczany dla zwięzłości. Możesz lepiej zrozumieć mechanizm here.

+0

Chociaż jest to rzeczywiście przydatna informacja, to czego szukam, jeśli nawet istnieje, jest prostym sposobem, aby w linii poleceń wydrukować cały ślad, zamiast pisać "... 13 więcej" @PavanKumarK powiedział w komentarze, które mogłyby zwiększyć linie strony konsoli, ale jeszcze nie opracował odpowiedzi ... Czy to możliwe? – Maslor

+0

@Maslor: Dodałem go –

+0

Dzięki za wyjaśnienie! – Maslor

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

Poszukuję alternatywnej prostej metody, która nie wymaga dodawania kodu do mojej aplikacji, jeśli istnieje. – Maslor

+0

@ Recoba20 Wyjaśnij swój kod. –

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() to tyle, albo brakuje mi czegoś, co wiesz, ale nie chcesz się nim dzielić? – Recoba20

-1

Standardowa konsola systemu Windows (cmd) jest bardzo krótki funkcji, należy zainstalować konsolę na sterydach jak te, które są tam, dzięki czemu będziemy mogli mieć większy przewijania. Zapoznaj się z wymienionymi alternatywami: here.

Osobiście używam cmder, którego nie ma na liście, ale musisz przetestować je wszystkie i spojrzeć, które pasują ci lepiej.

0

Możesz wydrukować cały stos Traces według poniższej metody. Przeczytanie Java Doc for printStackTrace wyjaśni, dlaczego jest to zaprojektowane w ten sposób.

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

Poszukuję alternatywnej prostej metody, która nie wymaga dodawania kodu do mojej aplikacji, jeśli istnieje. – Maslor

+1

PrintStackTrace może dać tylko tyle, a ten został zaprojektowany, aby być zwięzłym. Więc bez dodawania małego kodu obawiam się, że nie ma sposobu, aby uzyskać pełny ślad stosu. – sakthisundar

Powiązane problemy