web-dev-qa-db-ja.com

例外のスタックトレースを印刷する方法Android

現時点ではこれを実行しているので、スタックトレースを出力したいと思います。

_} catch (IOException e) {
    throw new Error("Copying Failed");
}
_

そして、e.stacktrace();を印刷するように言われました

どうすればいいですか?

29
Somk
} catch (IOException e) {
    Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}

LogCatで出力を確認します。

72
Vit Khudenko

他の方法、非常に便利:

try
{
...
}
catch (Exception e)
{
    Log.e(APP_TAG, "STACKTRACE");
    Log.e(APP_TAG, Log.getStackTraceString(e));
}
25
Bourbon

Androidでは、Androidで使用されるLogcatログビューアでうまく機能するログメソッドを使用する必要があります。

} catch (IOException e) {
   Log.e("YOUR ERROR TAG HERE", "Copying failed", e);
}

Throwableを引数として使用するLog.eメソッドを使用すると、ログクラスがスタックトレースを取得し、Logcatに正しくログを記録することを確認できます。 e.printStackTraceを使用する場合、これは一般的なJavaロギングメソッドを使用し、Logcatで正しく表示されず、場合によってはlogcatのクラス名をダブルクリックしてスタックトレースに記載されているクラスとメソッドにジャンプします。

ゼロ除算のStackstackを出力すると、次のようになります。

11-21 20:55:47.360: W/System.err(989): Java.lang.ArithmeticException: divide by zero
11-21 20:55:47.379: W/System.err(989):  at test.tabs.TabChooser.onCreate(TabChooser.Java:15)
11-21 20:55:47.390: W/System.err(989):  at Android.app.Activity.performCreate(Activity.Java:4465)
11-21 20:55:47.410: W/System.err(989):  at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1049)
11-21 20:55:47.410: W/System.err(989):  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1919)
11-21 20:55:47.420: W/System.err(989):  at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1980)
11-21 20:55:47.420: W/System.err(989):  at Android.app.ActivityThread.access$600(ActivityThread.Java:122)
11-21 20:55:47.420: W/System.err(989):  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1146)
11-21 20:55:47.420: W/System.err(989):  at Android.os.Handler.dispatchMessage(Handler.Java:99)
11-21 20:55:47.420: W/System.err(989):  at Android.os.Looper.loop(Looper.Java:137)
11-21 20:55:47.420: W/System.err(989):  at Android.app.ActivityThread.main(ActivityThread.Java:4340)
11-21 20:55:47.430: W/System.err(989):  at Java.lang.reflect.Method.invokeNative(Native Method)
11-21 20:55:47.430: W/System.err(989):  at Java.lang.reflect.Method.invoke(Method.Java:511)
11-21 20:55:47.430: W/System.err(989):  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:784)
11-21 20:55:47.430: W/System.err(989):  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:551)
11-21 20:55:47.430: W/System.err(989):  at dalvik.system.NativeStart.main(Native Method)

例外は警告として記録され、ログタグはあまり役に立ちません。

ゼロによる除算の正しいロギングは次のようになります。

11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): Copying failed
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): Java.lang.ArithmeticException: divide by zero
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at test.tabs.TabChooser.onCreate(TabChooser.Java:16)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.Activity.performCreate(Activity.Java:4465)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1049)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1919)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1980)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.ActivityThread.access$600(ActivityThread.Java:122)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1146)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.os.Handler.dispatchMessage(Handler.Java:99)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.os.Looper.loop(Looper.Java:137)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Android.app.ActivityThread.main(ActivityThread.Java:4340)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Java.lang.reflect.Method.invokeNative(Native Method)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at Java.lang.reflect.Method.invoke(Method.Java:511)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:784)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:551)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at dalvik.system.NativeStart.main(Native Method)

例外は、ログタグとログメッセージと共にエラーとして正しく記録されます。

13
Janusz
} catch (IOException e) {
    e.printStackTrace();
}
10
AlexR

e.printStackTrace();...を介してスタックトレースを出力するように要求された可能性が最も高い.

} catch (IOException e) {
    e.printStackTrace();
    throw new Error("Copying Failed");
}
1