2011-11-21 16 views

Respuesta

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

y comprobar el LogCat para la salida.

+0

Es preferible sobre esta System.err? –

+0

@Igor G .: Sí, Igor, esto es preferible a System.err. Si usa simplemente System.err, entonces no podrá ver la etiqueta de su aplicación en el resultado de LogCat. –

+5

Solo obtengo 'java.lang.NullPointerException' pero eso no es una acumulación de pila, ¡eso es solo el error! ¿Cómo puedo obtener la traza completa? –

10
} catch (IOException e) { 
    e.printStackTrace(); 
} 
1

Lo más probable es que se solicitaron para imprimir el seguimiento de la pila a través de e.printStackTrace(); ...

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

En Android debe utilizar los métodos de registro que funcionan bien con el visor de registro Logcat utilizado por Android.

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

Utilizando el método Log.e que toma un throwable como un argumento a asegurarse de que la clase de registro se llevará a la StackTrace y conectarse correctamente a Logcat. Si utiliza e.printStackTrace, utilizará los métodos generales de registro de Java y no aparecerá correctamente en Logcat y en algunos casos no será posible hacer doble clic en un nombre de clase en logcat para saltar a la clase y el método mencionados en el stacktrace.

Imprimir StackTrace para una división por cero se verá así:

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) 

La excepción se registra como una advertencia y la etiqueta de registro no es muy útil.

registro correcto de una división por cero se verá así:

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) 

La excepción se registra correctamente como un error con su etiqueta de registro y el mensaje de registro.

21

Un otro método, muy útil:

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

¿dónde configuró 'APP_TAG'? o no lo hiciste? –

+1

@FranciscoCorralesMorales: 'APP_TAG' es simplemente una convención común para nombrar la etiqueta de su proyecto con una variable constante. Puede definirlo para lo que quiera que sea el nombre de etiqueta de su aplicación. – sligocki

Cuestiones relacionadas