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 cuando APP_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.

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ó.

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.

  • Error de instalación del paquete Android-SDK aunque Eclipse y SDK se ejecutan como Administrador en Vista
  • ¿Detectar que el dispositivo está cerrando?
  • Adición de una nueva clase a Android Project
  • Actividad de ADT en blanco creada con actividad de fragmentos.
  • Aapt.exe ha dejado de funcionar
  • Plugin para Android de Eclipse - libncurses.so.5
  • Android: mover los botones libremente en el editor de diseño gráfico de Eclipse
  • DDMS no muestra subprocesos desde dispositivo
  • La actividad de Android se reinicia cuando cambia la orientación
  • ¿Para qué objetivo de Android debo desarrollar? ¿Android 4.4W o android 4.4L o android 4.4 kitkat?
  • Android Lint: ¿Cómo suprimir todas las advertencias asociadas con la biblioteca de soporte?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.