Собственный код - как получить стек вызовов функций (обратная трассировка) программно

У меня есть кодовая база C ++, работающая на Android, и я хочу, чтобы пользователи отправляли отчеты о сбоях.

Я использую библиотеку ACRA , которая отлично работает с Java-кодом, но когда что-то дает сбой в машинном коде, я не получаю достаточно информации. На самом деле я бы хотел получить трассировку стека вызовов собственных функций. Я знаю, что информация о сбое печатается в logcat после завершения моего процесса, и я могу настроить ACRA для чтения / отправки logcat. Я настроил свой код для обнаружения собственного сбоя с помощью обработчиков сигналов и обратного вызова Java для отчета ACRA. Работает тоже нормально.

Однако у этого подхода плохое время - ACRA читает журналы, пока аварийный процесс еще жив, а Android (не знаю точно, в какой части) записывает отчет о сбое в logcat после полного завершения аварийного процесса. Поэтому я не получаю трассировки стека при использовании ACRA.

Я ищу способ программно прочитать текущую трассировку стека из кода C ++ и передать эту информацию в ACRA (или, возможно, другой инструмент для отчетов о сбоях).

Все, что мне нужно, это какой-то отчет, записанный в 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

Есть ли способ получить эту трассировку стека из моего кода?

23
задан Cœur 25 April 2017 в 16:56
поделиться