2010-12-03 14 views
77

例外をスローするtry/catchブロックがあり、Androidデバイスログに例外に関する情報が表示されます。Android - ログに完全な例外バックトレースを出力

私は私の開発コンピュータからこのコマンドを使用して、モバイルデバイスのログをお読みください。

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

私が最初にこれを試してみました:

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

それは、ログには何も印刷されません。それはたくさんの助けをしたので、残念です。

私が達成した最高です:

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

何もないより良いが、非常に満足していません。

完全なバックトレースをログに出力する方法は知っていますか?

ありがとうございました。

答えて

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

さらに、私のスタイル:Log.e(e.getClass()。getName()、e.getMessage()、e); – Vikas

+22

e.getMessage()を使用すると注意してください。getMessage()は、投げられた例外のタイプに応じてnullを返します。これは、Logメソッドのメッセージパラメータとしてnullがサポートされていないため、 [here](http://developer.android.com/reference/java/lang/Throwable.html#getMessage%28%29) – Uniqe

+0

を参照してください。さらに、この例外を2番目のコードで発生させたコードの種類パラメータ。メッセージはすでに出力に含まれています。 – 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()); 
} 

それとも...屋が知っている... EboMikeは言いました。

+1

最も創造的な解決策:) – EboMike

2

e.printStackTrace()はそれを私にプリントします。私はlogcatを正しく実行しているとは思わない。ただ例外もThrowableをであるため、このヘルパー関数も素敵な作品

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

33

を実行し、シェルでそれを実行しないでください。

try{ 
     //bugtastic code here 
    } 
    catch (Exception e) 
    { 
     Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); 
    } 
+1

あなたのコード内の 'TAG'とは何ですか? – humanityANDpeace

+0

アプリと場所を指定するための文字列です。どんな文字列もそこで行います。 – George

+0

素敵な答えは、受け入れる必要があります – Hamidreza

1

デフォルトの出力とエラー出力はデフォルトで/ dev/nullに送られ、すべてが失われます。あなたは、この出力を記録したい場合は、私がStringに例外をキャストしなければならなかったのAndroidの文脈では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

を示す説明書「stdoutとstderrの表示」に従う必要があります。

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)); 
} 
関連する問題