Jaki jest najłatwiejszy sposób wydrukowania stosu z wydruku debugowania? Często podczas testowania chciałbyś wiedzieć, jaki jest stan wywołania, prowadzący do sytuacji powodującej pojawienie się komunikatu debugowania.Jak mogę w java dodać stacktrace do mojego wydruku debugowania
Odpowiedz
Powinieneś wychwycić wyjątek w bloku try-catch.
e.getStackTrace();
To zwraca wartość StackTraceElement [], którą następnie można zinterpretować.
również:
e.printStackTrace()
... będzie wydrukować StackTrace.
tylko tworzenie dowolnej wyjątek załatwia sprawę dla mnie:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
Powinieneś susić t użyj Thread.getStackTrace(). – jjnguy
Wierzę, że ta metoda spowoduje ostrzeżenie w niektórych środowiskach IDE, takich jak IntelliJ, ponieważ tworzysz wyjątek, ale go nie rzucasz. Polecam metodę Thread.getStackTrace(), która ma tę samą logikę, ale jest ukryta przed programistą. –
Thread.dumpStack() jest łatwiejszy, jeśli chcesz go wysłać do stderr (zapisuje, że musisz zapętlić elementy śledzenia stosu samemu). –
Jak również co @jjnguy powiedział, jeśli nie ma wyjątku, można również zadzwonić Thread.getStackTrace().
Jeśli chcesz zapisać ślad stosu do łańcucha można to zrobić;
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
Gdzie e jest, oczywiście, wyjątkiem.
Poza tym, wydaje się bardzo dziwne, aby autogenerować własny wyjątek tylko po to, aby znaleźć ślad stosu do debugowania. Zyskaj Eclipse i korzystaj z jego trybu debugowania, jest naprawdę świetny.
Jeśli używasz LOG4J
Exception e = new Exception();
log.error("error here", e);
wydrukuje StackTrace do swojego dziennika.
+1 za niestosowanie stdout/stderr –
Tylko dlatego musiałem to sam.
Jak zainspirowany odpowiedź How do I find the caller of a method using stacktrace or reflection?, można odzyskać stos wywołań za pomocą
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
Następnie przetwarzać i drukować/log cokolwiek jesteś zainteresowany Więcej pracy niż używanie Thread.dumpStack()
, ale bardziej elastyczne.
po prostu wydrukować bieżący ślad stosu do stderr, można zadzwonić:
Thread.dumpStack();
która sama właśnie nazywa:
new Exception("Stack trace").printStackTrace();
Do wyjścia do stdout zamiast stderr, przechodzą System.out
do printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
- 1. Czy mogę dodać skrypt debugowania do NPM?
- 2. Jak mogę automatycznie dodać pionowy pasek przewijania do mojego div?
- 3. Jak mogę dodać komplikacje do mojego projektu EXSTING Xcode?
- 4. Jak mogę dodać "bieżące pasmo" wkładu github do mojego bloga?
- 5. jak dodać Servlet API do mojego pom.xml
- 6. Jak dodać impuls do mojego projektu?
- 7. Jak dodać .hgignore do mojego folderu Mercurial?
- 8. Jak dodać buforowanie do mojego wideo HTML?
- 9. Jak programowo dodać EditTextPreferences do mojego PreferenceFragment?
- 10. Jak szybko dodać ustawienia do mojego kakao?
- 11. Jak dodać urządzenie do mojego profilu informacyjnego?
- 12. Jak dodać mojego bota do kanału?
- 13. jak dodać dziennik do mojego vbscript
- 14. Jak dodać ikonę do mojego repozytorium?
- 15. Czy mogę warunkowo dodać klauzulę where() do mojego zapytania knex?
- 16. Jak dodać plik właściwości Java do mojego projektu Java w Eclipse
- 17. Jak dodać wstępnie skompilowany plik nagłówkowy do mojego projektu ios?
- 18. StackTrace dla UserWarning
- 19. Jak dodać punkty przerwania do zapisanej procedury SQL do debugowania?
- 20. Czas wydruku Java ostatniej kompilacji
- 21. Generowanie Java JaxB, Jak mogę uzyskać bigDecimal z mojego xsd?
- 22. Jak mogę przeprowadzić test mutacji mojego programu Java?
- 23. błąd Java StackTrace wersja nieobsługiwany MAJOR.MINOR 51,0
- 24. Jak dodać tę kontrolkę WPF do mojego WinForm?
- 25. Jak dodać plik TXT do mojego pliku EXE?
- 26. Jak dodać strukturę Core Animation do mojego projektu Xcode?
- 27. Odpowiednik debugowania w języku Java?
- 28. Jak dodać plik z mojego drzewa źródłowego do strony Maven
- 29. Dostęp do StackTrace podczas wdrażania w trybie Release
- 30. Jak dodać klej "minitest" do mojego pomocnika testowego?
Minusem jest to, że dumpStack() przechodzi tylko na stderr i nie można go wysłać gdzie indziej, jak to możliwe, z wyjątkiem lub Thread.getStackTrace(). –
Użyj rejestrowania. Drukowanie na stdout/stderr powinno być wykonywane tylko przez narzędzia systemu operacyjnego i aplikacje "Hello World". –