2010-05-25 24 views
17

Moje okno logcat w Eclipse wyświetla tylko kilka pierwszych linii StackTrace dla każdego wyjątku. Oznacza to, że często nie widzę, gdzie wystąpił wyjątek. Czy istnieje sposób na zmianę tego ustawienia?Okno Eclipse Logcat obcina wyjątkowe ślady stosu

+0

Która wersja SDK używasz? To dość dziwaczny behaivor ... czy możesz podać przykład wyjścia, które odcina ślad stosu? * Edycja *: Nie widziałem tagu eclipse, przepraszam. W każdym razie, jeśli użyjesz oryginalnego logcat, myślę, że nie będziesz miał problemów: 'adb logcat' – Cristian

+0

Jeśli odnosisz się do części" ... 12 linii więcej ... ", widzisz tylko to dla wyjątków były przyczyną innego wyjątku. Jeśli górna część śladu stosu jest taka sama jak druga, pełny zestaw ramek jest pokazany tylko dla jednego z nich, a drugi otrzymuje "..." traktowanie. (Naprawdę musisz dodać więcej szczegółów do swojego pytania - po prostu zgadujemy, co chcesz.) – fadden

+0

@Fadden: Masz rację - w ogóle to nie odcina. Jeśli umieścisz ten komentarz jako odpowiedź, zaakceptuję go. – Casebash

Odpowiedz

32

Jeśli odnosisz się do części "... 12 linii więcej ...", widzisz tylko to dla wyjątków, które były przyczyną innego wyjątku. Jeśli górna część śladu stosu jest taka sama jak wcześniejsza, pełny zestaw ramek jest pokazany tylko dla wyjątku zewnętrznego, a pozostałe ślady otrzymują traktowanie "...".

Innymi słowy, fragment śladu, którego nie pokazano, jest duplikatem śladu, który pojawił się wcześniej w łańcuchu przyczyn wyjątku. Załóżmy na przykład, że mam kod, w którym wywoływana jest metoda main(), która wywołuje two() i tak dalej. four() zgłasza wyjątek. two() łapie i ponownie rzuca. Wyjątkiem będzie wyglądać następująco:

java.lang.RuntimeException: re-throw 
    at Foo.two(Foo.java:14) 
    at Foo.one(Foo.java:7) 
    at Foo.main(Foo.java:3) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: first 
    at Foo.four(Foo.java:23) 
    at Foo.three(Foo.java:19) 
    at Foo.two(Foo.java:12) 
    ... 3 more 

W „spowodowane” wyjątek mówi „... 3 więcej” niż wyraźnie wymieniając one(), main() i dalvik.system.NativeStart.main. Aby uzyskać pełny ślad początkowego wyjątku, zacznij od odczytania jego śladu, a następnie kontynuuj od powyższego śledzenia.

Uwaga nie pokrywają - two() pojawia się w obu, ale w „pierwszym” prześledzić to na wywołaniu three(), oraz w „ponownego rzutu” prześledzić to na polecenie throw.

+0

Więc jakie jest rozwiązanie, jeśli oryginalny wyjątek jest tym, którego chcesz zobaczyć więcej niż 7 linii? – George

+0

Przepisałem wyjaśnienie i dodałem przykład. – fadden

+1

Tak, od jakiegoś czasu nie pracowałem z "prawdziwą" Javą, ale powinienem był to sprawdzić, szukając go w "Java stacktrace 12 more" lub coś w tym stylu. Jak zauważyłeś, linie redakcyjne ("12 więcej") są zduplikowanymi liniami ze stosu powyżej. Miałem wrażenie, że LogCat przycinał "pomocne" linie stosu, ale tak nie jest. Dzięki za naprawienie mojego nieporozumienia. – George

-1

Jeśli twój kod wywoła metodę, która daje zbyt duży stos, możesz (i powinieneś) obsłużyć wyjątek w kodzie i wypisać, co jest istotne dla logów.

Jeśli nie masz żadnych wyjątków, a nawet nie wiesz, gdzie w swoim kodzie powinieneś umieszczać takiego handler'a, to problem jest zupełnie gdzie indziej - powinieneś obsługiwać wyjątki nieco lepiej.

Powiązane problemy