2011-11-12 11 views
7

Soy nuevo en el mundo de Android.No se puede abrir el archivo de seguimiento de pila '/data/anr/traces.txt': Permiso denegado

He hecho una solicitud de registro de usuario. Funcionaba bien pero cuando he intentado añadir un control de giro a mi archivo de la actividad, se muestra un error en AVD, como,

El Registro de aplicación (com.students proceso) se ha detenido de forma inesperada . Por favor, vuelva a intentarlo

viene.

y mi gato registro está mostrando el error

"11-12 10: 42: 06,816: E/dalvikvm (313): No se puede abrir archivo de rastreo de pila '/ data/ANR/rastros. txt ': Permiso denegado "

¿Qué es realmente ese error? ¿Cómo puedo deshacerme de eso?

+2

mostrará el código que está utilizando y también la completa pila-trace. –

+1

Tu aplicación se bloqueó por algún otro motivo (error en el código). Puede ignorar el error "No se puede abrir la pila de seguimiento ...", no es el motivo de la falla de la aplicación. Por favor, publique el seguimiento completo de la pila y la parte relevante del código de su aplicación. – Karthik

+0

También puede obtener este error si no configura la tarjeta SD en su emulador. –

Respuesta

3

Esto era un problema que tenía cuando era nuevo en Android. Luego aprendí que el mensaje sobre no poder escribir en traces.txt no era el problema real con el programa.

La solución a este problema es, por lo tanto, encontrar y corregir el motivo real (no relacionado con este mensaje) por el que el programa se bloquea. Entonces este mensaje (que refleja un problema de configuración en el sistema de informe de fallos) ya no se producirá.

+4

Esto debería ser un comentario. No muestro cómo corrigió su error. –

+0

Esta es realmente la respuesta correcta; sin embargo, estoy un poco incómodo con el hecho de que después de la edición de un moderador lo que se está mostrando actualmente es mi re-escritura previamente revelada, sin el texto original (del propio indagador de preguntas) que había retenido cuidadosamente cuando lo edité. –

10

Está tratando de acceder al almacenamiento externo. Asegúrese de tener el permiso necesario definido en su archivo Manifest. Esto se puede hacer agregando

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+2

Esto no parece resolver el error de permiso de escritura para uno de mis dispositivos de prueba, Android 2.3.6 – nmr

+10

Esta respuesta es ** totalmente incorrecta y bastante mala advertencia **. Primero, el problema es con Android, no con el programa de aplicación.Pero incluso si fuera el programa el que se está escribiendo, esta respuesta es obviamente incorrecta ya que **/data no es una ruta de almacenamiento externo **. –

4

Este error no tiene nada que ver con su aplicación. Su archivo de rastreo de pila de referencia se genera cuando su aplicación falla para que el usuario pueda informarlo al editor. La razón por la que ve ese error es que su aplicación no se instaló en el mercado de Android, por lo que no tiene permiso para escribir en ese archivo. Los errores que genera su aplicación durante la depuración se pueden ver en LogCat y un seguimiento de la pila se vaciará allí describiendo el error.

+1

Esta respuesta es básicamente correcta en el sentido de que el mensaje en particular indica un problema en el mecanismo de notificación de fallas, pero no en el motivo * por el que algo se colgó *. La causa del bloqueo (si se trata de un bloqueo de una aplicación que está siendo desarrollada, y no una caída cronometrada coincidente de otra cosa) debe determinarse con logcat y/u otras herramientas de depuración y corregidas. Estoy menos seguro de que el vínculo de explicación ofrecido sea el permiso faltante para no ser una instalación de mercado (en lugar de una simple configuración incorrecta de la compilación de Android instalada), ¿alguna referencia sobre esa teoría? –

+0

En particular, en dispositivos actuales, este archivo es mundialmente editable. –

+0

@ChrisStratton Estoy votando esta respuesta, ya que me encontré con este problema yo mismo y después de investigar descubrí que el motivo del error era porque la aplicación no era de confianza (no provenía de Play Store). Esta es una política que se aplica a nivel del kernel. Tuve que mirar los registros del kernel para verlo. Entonces, la respuesta de Sani es bastante precisa, aunque no está respaldada por ninguna fuente/prueba como usted mencionó :) –

1

La operación en /data/anr/traces.txt necesita usuario root o del sistema chmod.
Ref ActivityManagerService#dumpStackTraces código:

public static File dumpStackTraces(boolean clearTraces, ArrayList<Integer> firstPids, 
     ProcessCpuTracker processCpuTracker, SparseArray<Boolean> lastPids, String[] nativeProcs) { 
    String tracesPath = SystemProperties.get("dalvik.vm.stack-trace-file", null); 
    if (tracesPath == null || tracesPath.length() == 0) { 
     return null; 
    } 

    File tracesFile = new File(tracesPath); 
    try { 
     if (clearTraces && tracesFile.exists()) tracesFile.delete(); 
     tracesFile.createNewFile(); 
     FileUtils.setPermissions(tracesFile.getPath(), 0666, -1, -1); // -rw-rw-rw- 
    } catch (IOException e) { 
     Slog.w(TAG, "Unable to prepare ANR traces file: " + tracesPath, e); 
     return null; 
    } 

    dumpStackTraces(tracesPath, firstPids, processCpuTracker, lastPids, nativeProcs); 
    return tracesFile; 
} 

Y puedo manejar el problema en la cáscara de la siguiente manera.
adb root
adb shell touch /data/anr/traces.txt
adb shell kill -3 ${APP_PID}

Cuestiones relacionadas