Android NDK de depuración en Eclipse – cómo detener segfaults / SIGILL que sólo se producen al pisar en código nativo
He configurado la depuración en Eclipse para el código nativo usando el Android NDK (en Windows XP, con Cygwin) hasta el punto donde puedo establecer puntos de interrupción en código Java y nativo y el depurador se romperá en ellos correctamente. Mi problema es que cuando paso a través del código nativo, a menudo obtendré errores de segmentación / SIGILL que no se producen cuando se continúa pasado el punto de interrupción en su lugar.
- Mi aplicación es debuggable como se define en AndroidManifest.xml
- He alterado el (NDK) /build/core/build-binary.mk para evitar que
APP_OPTIM
símbolos de depuración cuandoAPP_OPTIM
se define como depuración, que está en el archivo Application.mk en mi directorio jni - He definido
LOCAL_CFLAGS := -g -O0
en el archivo de Android.mk, y también he intentado cada uno de estos indicadores individualmente
He leído que este problema tiene que ver con el código optimizado generado, pero desactivar la optimización con -O0
no tiene ningún impacto en mi problema. También he encontrado con el NDK_BUILD=1
bandera al construir, pero la definición de debuggable=true
en AndroidManifest.xml aparentemente tiene el mismo efecto.
- No puedo confirmar un archivo de biblioteca .so utilizando subclipse
- Proyecto de importación sin archivo .project
- Eclipse Android Editor de diseño gráfico roto
- Android: Umano AndroidSlidingUpPanel Deslizamiento de dos paneles?
- Cómo habilitar GPS en Eclipse Emulator para Android
He intentado esto en un emulador (funcionando 2.3.3) y en un dispositivo (funcionando 2.2 – que sorprendentemente no tenía los problemas del hilo que esperé), con resultados similares (aunque si recuerdo correctamente, los fracasos sucedieron en diferente Puntos en código).
¿Alguien tiene alguna idea de posibles arreglos / pasos que podría probar, y / o han sido capaces de paso con éxito a través de código nativo sin problemas?
Muchas gracias
Editar: Esto nunca fue realmente resuelto, pero para cualquiera que quiera echar un vistazo a mi guía para NDK depuración, puede encontrar aquí .
Editar 2: Las respuestas que llegué a esta pregunta llegó una vez que nuevas versiones de la NDK había salido, y esta pregunta ahora puede ser redundante. Mi guía todavía puede funcionar, pero no he estado usando el NDK por un tiempo, así que no puedo dar fe de su continuada corrección. He aceptado la respuesta que tengo, ya que los tres dicen básicamente lo mismo, y esa fue la primera que se presentó.
- La carpeta SRC de Eclipse está vacía (la clase MainActivity no se ha creado) después de crear un nuevo proyecto android con Eclipse
- Eclipse "Descripción del proyecto no válida" al crear un nuevo proyecto desde un origen existente
- Error al cargar sdk cuando se inicia eclipse
- Actualización de SDK de Eclipse y Android muy buggy a partir del 12/07/2012
- ¿Compartir un proyecto Android + Eclipse a través de SVN?
- varias clases en un único archivo físico en android
- Cómo crear un nuevo diseño para un proyecto de Android (con Eclipse)
- Ocultar nombre de la aplicación y su barra
Si funciona para armeabi y no para armeabi-v7a, esto debería ser un problema de compilación. Descomprimir el archivo apk en el directorio bin y comprobar los archivos de la biblioteca en el armeabi y armeabi-v7a son los mismos.
Una cosa que he notado es que armeabi-v7a no funciona bien para depurar código nativo en ciertos dispositivos. Trate de construir sólo armeabi y ver si eso ayuda.
Compile los archivos de origen c ++ con -march = armv4
En build / core / combo / brazo / yourarch.mk poner -march = armv4 y luego hacer mm -B showcommands para comprobar si se utilizó.
Entonces gdbserver puede manejarlo.
- Cómo descartar una Snackbar con su propio botón de acción?
- Android: ¿Dónde se almacenan los archivos de base de datos?