Tengo una aplicación que no está en el mercado (firmada con un certificado de depuración), pero me gustaría obtener datos de registro de fallos, cada vez que falla mi aplicación. ¿Dónde puedo encontrar un registro de por qué mi aplicación se bloqueó?¿Cómo obtener los registros de bloqueo de Android?
Respuesta
Si su aplicación está siendo descargada por otras personas y se bloquea en dispositivos remotos, es posible que desee buscar en una biblioteca de informes de errores de Android (referenciada en this SO post). Si solo está en su dispositivo local, puede usar LogCat.
Incluso si el dispositivo no estaba conectado a un equipo host cuando se produjo el bloqueo, conectar el dispositivo y emitir un comando adb logcat
descargará todo el historial de logcat (al menos en la medida que está almacenado en el búfer, lo que generalmente es una gran cantidad de datos de registro, simplemente no es infinito). ¿Alguna de esas opciones responde tu pregunta? Si no, ¿puedes intentar aclarar un poco más lo que estás buscando?
¿Puede detallar cómo usar el comando adb logcat? ¿Lo ejecuto dentro del directorio/SDK/tools?¿Hay alguna bandera que deba tener en cuenta? etc. –
@ jesses.co.tt Sí, simplemente ejecute 'adb logcat' desde cualquier directorio en el que se encuentre adb. Alternativamente puede usar las herramientas de SDK incluidas en el plugin de Eclipse –
Ok, muchas gracias. –
Si está utilizando Eclipse, asegúrese de utilizar depuración y no ejecutar. Asegúrese de estar en la perspectiva de depuración (arriba a la derecha) Puede que tenga que presionar 'Reanudar' (F8) varias veces para que se imprima el registro. El registro de bloqueo estará en la ventana Logcat en la parte inferior; haga doble clic para pantalla completa y asegúrese de desplazarse hasta la parte inferior. Usted verá el texto en rojo para los errores, la traza de choque será algo así como
09-04 21:35:15.228: ERROR/AndroidRuntime(778): Uncaught handler: thread main exiting due to uncaught exception
09-04 21:35:15.397: ERROR/AndroidRuntime(778): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dazlious.android.helloworld/com.dazlious.android.helloworld.main}: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Looper.loop(Looper.java:123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.main(ActivityThread.java:3948)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at dalvik.system.NativeStart.main(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): ... 11 more
Las partes importantes de éste son
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
los que nos dicen que era un arreglo fuera de los límites de excepción en línea 13 de main.java en el método onCrate.
+1 ok esto fue muy tonto de mi parte ... – UncleZeiv
Puede usar Apphance. Este es un servicio multiplataforma (ahora principalmente Android, iOS con otras plataformas en camino) que permite depurar remotamente cualquier dispositivo móvil (Android, iOS ahora, otros en desarrollo). Es mucho más que solo un registro de fallas, de hecho es mucho más: registro, informe de problemas por probadores, registros de fallas. Tarda unos 5 minutos en integrarse. Actualmente puede solicitar el acceso a la versión beta cerrada.
Descargo de responsabilidad: Soy CTO de Polidea, una compañía detrás de Apphance y cocreadora de la misma.
Actualización: ¡Apphance ya no es una versión beta cerrada! Actualización 2: Apphance está disponible como parte de http://applause.com ofreciendo
Acabo de probar la aplicación y me gusta. Los documentos omitieron un punto clave al integrar la aplicación de acceso a la aplicación; con la última versión de Eclipse ADT, debe poner apphance.jar en el directorio 'libs' como [this] (http://stackoverflow.com/a/9916751/9648). Así explica la respuesta. [Este commit de github] (https://github.com/johnnylambada/WorldMap/commit/235ac0461a91a080cca2cdcb7fd2059464165406) muestra los cambios que necesitaba realizar en mi aplicación WorldMap para usar la aplicación. – JohnnyLambada
@HohnnyLambada Gracias por su comentario. Hemos actualizado la documentación para aclarar esto. –
esto no debería tener tantas flechas ascendentes que cuesta 10 veces más que la mayoría de los presupuestos de desarrollo (¡$ 2,500 al mes!) – user26676
Aquí hay otra solución para Crash Log.
mercado de Android tiene herramienta llamada "Crash Collector"
cheque siguiente enlace para obtener más información
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
No funciona en Android 4.1 y versiones posteriores (nuevos permisos para leer registros). – cat
Puede utilizar ACRA de this. Incluyendo esta biblioteca a sus proyectos y configurándola, podría recibir (en su correo electrónico o gdocs) sus informes de fallos. Perdón por mi mal ingles.
Si solo está buscando el registro de bloqueo mientras su teléfono está conectado a la computadora, use la vista DDMS en Eclipse y el informe está justo allí en LogCat dentro de DDMS cuando su aplicación se cuelga durante la depuración.
También puede utilizar la biblioteca crashcatcher
Uso Acra reportero de accidente para Android ..Acra lib
La manera de hacer esto es para implementar la interfaz Thread.UncaughtExceptionHandler
y pasarlo a Thread.setDefaultUncaughtExceptionHandler()
al inicio de su actividad de onCreate()
. Aquí está la clase de implementación TopExceptionHandler
.
public class TopExceptionHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler defaultUEH;
private Activity app = null;
public TopExceptionHandler(Activity app) {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
this.app = app;
}
public void uncaughtException(Thread t, Throwable e) {
StackTraceElement[] arr = e.getStackTrace();
String report = e.toString()+"\n\n";
report += "--------- Stack trace ---------\n\n";
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
report += "-------------------------------\n\n";
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if(cause != null) {
report += cause.toString() + "\n\n";
arr = cause.getStackTrace();
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
}
report += "-------------------------------\n\n";
try {
FileOutputStream trace = app.openFileOutput("stack.trace",
Context.MODE_PRIVATE);
trace.write(report.getBytes());
trace.close();
} catch(IOException ioe) {
// ...
}
defaultUEH.uncaughtException(t, e);
}
}
Nota Dejamos que el entorno operativo de Android funcione con él.
En la parte superior de su actividad para registrar una instancia de clase por encima de la siguiente manera:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...
Este controlador guarda la traza en un archivo. Cuando ReaderScope
se reinicia la próxima vez, detecta el archivo y le indica al usuario si desea enviarlo por correo electrónico al desarrollador.
Para enviar por correo electrónico el Stack Trace, ejecute el siguiente código para empacarlo en un correo electrónico.
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ReaderScopeActivity.this.openFileInput("stack.trace")));
while((line = reader.readLine()) != null) {
trace += line+"\n";
}
} catch(FileNotFoundException fnfe) {
// ...
} catch(IOException ioe) {
// ...
}
Intent sendIntent = new Intent(Intent.ACTION_SEND);
String subject = "Error report";
String body = "Mail this to [email protected]: " + "\n" + trace + "\n";
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
sendIntent.putExtra(Intent.EXTRA_TEXT, body);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.setType("message/rfc822");
ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:"));
ReaderScopeActivity.this.deleteFile("stack.trace");
O también se puede utilizar ACRA Informe de errores System.Just calcular el ACRA.jar en sus bibliotecas de proyectos y utilizar el siguiente fragmento de código antes de que su declaración de la clase de actividad lanzador
@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT)
¿No será la línea defaultUEH.uncaughtException (t, e); llamar al método uncaughtException() infinitamente? –
Esto es de http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html
puede usar adb:
adb logcat AndroidRuntime:E *:S
'adb logcat -d CRASH: E *: S *' –
Sí. Funcionó: adb logcat AndroidRuntime: E *: S –
Si una Estamos buscando una herramienta básica de informe de fallas, intente crashlytics.
Si quiere una herramienta de informes más avanzada, Checkout Gryphonet. Registra todos los bloqueos ocurridos junto con la línea exacta de código que causó el bloqueo junto con marcadores automáticos que muestran los pasos que dio el usuario antes del bloqueo y más.
¡Buena suerte!
Prueba la aplicación de registro Carsh de android.
utiliza la aplicación link para descargar.
He creado esta biblioteca para resolver todos sus problemas. Crash Reporter is a handy tool to capture all your crashes and log them in device locally
Solo agregue esta dependencia y listo.
compile 'com.balsikandar.android:crashreporter:1.0.1'
Encuentra todos tus bloqueos en el dispositivo localmente y arréglesalo a tu conveniencia. Los bloqueos se guardan usando un formato de fecha y hora fácil de seguir. Además, también proporciona API para capturar excepciones registradas usando el método a continuación.
CrashRepoter.logException(Exception e)
¿Cuál es la clase de Java que utilizó para obtener los registros de bloqueo de un dispositivo? – Xenolion
Usted puede intentar esto desde consola: -
Logcat ADB accidente -b
- 1. ¿Cómo se leen los registros de bloqueo de iOS 4?
- 2. ¿Dónde guarda Android los registros de cierre?
- 3. Transacción eficiente, bloqueo de registros
- 4. registros de bloqueo de iPhone dicen "Versión: ???"
- 5. cómo obtener registros vlc?
- 6. ¿Cómo obtener todos los registros de CoreData Base utilizando NSManagedObjectSubClass?
- 7. Android: ¿Cómo obtener los registros del kernel después de kernel panic?
- 8. ¿Cómo obtener el registro de bloqueo de iPhone de los clientes?
- 9. obtener los registros de la última marca de tiempo mysql
- 10. LINQ paginación - obtener los registros totales
- 11. Doctrine 2 - Obtener todos los registros
- 12. Rieles: obtener ubicación de registros?
- 13. obtener los últimos tres meses registros de la tabla
- 14. cómo obtener los registros graphviz tener células que se alinean
- 15. ¿Cómo obtener los 5 mejores registros en SqLite?
- 16. Obtener los contactos de Android
- 17. ¿Cómo extraer los registros de transacciones bancarias?
- 18. Bloqueo de un teléfono Android (patrón de bloqueo o similar)
- 19. EventLog - Obtener registros disponibles
- 20. Los registros de bloqueo de iPhone no se simbolizan correctamente y tienen doble espacio
- 21. ¿Puedo identificar un teléfono con jailbreak de los registros de bloqueo?
- 22. Cómo evitar los errores de bloqueo de SQLiteException
- 23. ¿Cómo funcionan las aplicaciones de bloqueo de aplicaciones de Android?
- 24. Cómo ver los registros desde Slog
- 25. ¿Cómo puedo obtener los valores fuente y variables en los registros de ruby?
- 26. ¿Cómo deshabilitar los registros de Rails SQL?
- 27. Cómo obtener los colores del sistema Android
- 28. Cómo obtener los colores predeterminados en Android
- 29. Winston: cómo rotar los registros
- 30. Deshabilitar los registros de nginx
[biblioteca de Android para capturar y reportar los accidentes] (https://github.com/ajitsing/Sherlock) –