我想打印堆栈跟踪,因为此刻我有这个运行。如何打印stacktrace的异常Android
} catch (IOException e) {
throw new Error("Copying Failed");
}
而且我已经被告知打印e.stacktrace();
我该怎么办呢?
我想打印堆栈跟踪,因为此刻我有这个运行。如何打印stacktrace的异常Android
} catch (IOException e) {
throw new Error("Copying Failed");
}
而且我已经被告知打印e.stacktrace();
我该怎么办呢?
} catch (IOException e) {
Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
}
并检查输出logcat的。
} catch (IOException e) {
e.printStackTrace();
}
这是最有可能你被要求通过e.printStackTrace();
打印的堆栈跟踪...
} catch (IOException e) {
e.printStackTrace();
throw new Error("Copying Failed");
}
在Android中,您应该使用与Android使用的Logcat日志查看器很好地配合使用的日志方法。
} catch (IOException e) {
Log.e("YOUR ERROR TAG HERE", "Copying failed", e);
}
使用Log.e方法,它接受Throwable作为您确保日志类将采取堆栈跟踪和正确登录它logcat的一个参数。如果使用e.printStackTrace,它将使用常规的Java日志记录方法,并且它在Logcat中不会正确显示,并且在某些情况下,将不可能双击logcat中的类名称以跳转到上面提到的类和方法堆栈跟踪。
由零鸿沟打印堆栈跟踪看起来就像这样:
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)
唯一的例外是正确登录与您的日志标签错误和日志信息。
的另一种方法,是非常有用的:
try
{
...
}
catch (Exception e)
{
Log.e(APP_TAG, "STACKTRACE");
Log.e(APP_TAG, Log.getStackTraceString(e));
}
你在哪里设置了“APP_TAG”?或者你没有? –
@FranciscoCorralesMorales:'APP_TAG'只是一个用常量变量命名项目标签的常用约定。您可以将其定义为任何您想要的应用程序标记名称。 – sligocki
这是最好过System.err的? –
@Igor G .:是的,Igor,这比System.err更可取。如果只使用System.err,那么您将无法在LogCat输出中看到您的应用程序标签。 –
我只得到'java.lang.NullPointerException'但这不是一个堆栈跟踪,那只是错误!我怎么能得到完整的跟踪? –