Código nativo: cómo obtener la pila de llamadas de función (traza inversa) mediante programación

Tengo una base de código C ++ ejecutándose en Android y deseo que los usuarios me envíen informes de fallos.

Estoy usandoACRA library, que funciona bien para el código Java, pero cuando algo falla en el código nativo, no obtengo suficiente información. En realidad, me gustaría recibir el seguimiento de la pila de llamadas a funciones nativas. Sé que la información de bloqueo se imprime en logcat una vez que finaliza mi proceso, y puedo configurar ACRA para leer / enviar logcat. He configurado mi código para detectar fallas nativas usando manejadores de señales y llamando a Java para informar por ACRA. También funciona bien.

Sin embargo, hay un mal momento con este enfoque: ACRA lee los registros mientras el proceso de bloqueo aún está activo, y Android (no sabe exactamente qué parte) escribe el informe de bloqueo en logcat después de que el proceso de bloqueo finaliza por completo. Por lo tanto, no recibo rastros de pila cuando uso ACRA.

Así que estoy buscando una manera de leer mediante programación el seguimiento de la pila actual del código C ++ y enviar esta información a ACRA (u otra herramienta de informe de fallas) yo mismo.

Todo lo que necesito es algún tipo de informe escrito a logcat:

10-10 08:29:13.868: INFO/DEBUG(1121):          #00  pc 0003fc7c  /data/data/com.ex.lib/libapp.so
10-10 08:29:13.891: INFO/DEBUG(1121):          #04  pc 00016df4  /system/lib/libdvm.so
10-10 08:29:13.891: INFO/DEBUG(1121):          #05  pc 00045284  /system/lib/libdvm.so
10-10 08:29:13.899: INFO/DEBUG(1121):          #15  pc 00047c56  /system/lib/libdvm.so
10-10 08:29:13.922: INFO/DEBUG(1121):          #16  pc 00030e4c  /system/lib/libandroid_runtime.so

¿Hay alguna forma de obtener este seguimiento de pila de mi código?

Respuestas a la pregunta(2)

Su respuesta a la pregunta