2010-12-03 11 views
77

Ich habe einen Versuch/Catch-Block, der eine Ausnahme auslöst, und ich möchte Informationen über die Ausnahme im Android-Gerät Protokoll sehen.Android - Drucken vollständige Ausnahme Backtrace zu loggen

las ich das Protokoll des mobilen Geräts mit diesem Befehl von meinem Entwicklungscomputer:

/home/dan/android-sdk-linux_x86/tools/adb shell logcat 

ich den ersten versucht:

try { 
    // code buggy code 
} catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

aber das macht nichts in das Protokoll drucken. Das ist schade, denn es hätte viel geholfen.

Das Beste, was ich erreicht habe, ist:

try { 
    // code buggy code 
} catch (Exception e) 
{ 
    Log.e("MYAPP", "exception: " + e.getMessage());    
    Log.e("MYAPP", "exception: " + e.toString()); 
} 

Besser als nichts, aber nicht sehr befriedigend.

Wissen Sie, wie Sie das vollständige Backtrace in das Protokoll drucken?

Danke.

Antwort

133
try { 
    // code that might throw an exception 
} catch (Exception e) { 
    Log.e("MYAPP", "exception", e); 
} 
+1

Darüber hinaus My style: Log.e (e.getClass(). GetName(), e.getMessage(), e); – Vikas

+22

Vorsicht bei der Verwendung von e.getMessage() - getMessage() gibt, abhängig vom Typ der ausgelösten Ausnahme, null zurück, was an sich eine Ausnahme verursachen würde, da NULL als Nachrichtenparameter in den Protokollmethoden nicht unterstützt wird. Siehe [hier] (http://developer.android.com/reference/java/lang/Throwable.html#getMessage%28%29) – Uniqe

+0

Außerdem macht es mehr Sinn zu beschreiben, welche Art von Code diese Ausnahme in der zweiten verursacht hat Parameter. Die Nachricht ist ohnehin in der Ausgabe enthalten. – EboMike

7
catch (Exception e) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    PrintStream stream = new PrintStream(baos); 
    e.printStackTrace(stream); 
    stream.flush(); 
    Log.e("MYAPP", new String(baos.toByteArray()); 
} 

Oder ... ya know ... was sagte EboMike.

+1

Die kreativste Lösung :) – EboMike

2

e.printStackTrace() druckt es mir aus. Ich glaube nicht, dass Sie das Logcat korrekt ausführen. Sie nicht, es in einer Shell laufen, laufen nur

/home/dan/android-sdk-linux_x86/tools/adb logcat

33

Diese Hilfsfunktion funktioniert auch schön, da Ausnahme ist auch ein Throwable.

+1

Was ist der "TAG" in Ihrem Code? – humanityANDpeace

+0

Es ist eine Zeichenfolge, die zum Angeben der App und des Standorts verwendet wird. Irgendeine Schnur wird dort tun. – George

+0

nette Antwort, sollte Antwort angenommen werden – Hamidreza

1

Die Standardausgabe und die Fehlerausgabe werden standardmäßig an/dev/null weitergeleitet, so dass alles verloren ist. Wenn Sie diese Ausgabe protokollieren wollen, dann müssen Sie die Anweisungen „stdout und stderr Anzeigen“ here

2
public String getStackTrace(Exception e){ 
    StringWriter sw = new StringWriter(); 
    PrintWriter pw = new PrintWriter(sw); 
    e.printStackTrace(pw); 
    return sw.toString(); 
} 
0
try{ 
      ... 
} catch (Exception e) { 
    Log.e(e.getClass().getName(), e.getMessage(), e.getCause()); 
} 
0

Im Zusammenhang mit Android gezeigt folgen, ich hatte die Ausnahme in einen String zu werfen:

try { 
    url = new URL(REGISTRATION_PATH); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
} catch(MalformedURLException e) { 
    Log.i("MALFORMED URL", String.valueOf(e)); 
} catch(IOException e) { 
    Log.i("IOException", String.valueOf(e)); 
} 
Verwandte Themen