Ho codice C++ in esecuzione su Android e voglio avere rapporti di arresti anomali inviati dagli utenti.Codice nativo: come ottenere la chiamata stack delle chiamate (backtrace) a livello di programmazione
Sto usando ACRA library che funziona bene per il codice Java, ma quando qualcosa si blocca nel codice nativo, non ottengo abbastanza informazioni. In realtà mi piacerebbe ricevere la traccia dello stack delle chiamate di funzione native. So che le informazioni di crash vengono stampate in logcat al termine del mio processo e posso configurare ACRA per leggere/inviare logcat. Ho impostato il mio codice per rilevare l'arresto anomalo nativo utilizzando i gestori di segnale e richiamando Java per il reporting di ACRA. Funziona anche bene.
Tuttavia, questo approccio non funziona correttamente: ACRA legge i registri mentre il processo di arresto anomalo è ancora attivo e Android (non sa esattamente quale parte) scrive il rapporto di arresto anomalo su logcat al termine del processo. Quindi non ricevo tracce di stack quando uso ACRA.
Quindi sto cercando un modo per leggere in modo programmato la traccia dello stack corrente dal codice C++ e alimentare queste informazioni ad ACRA (o magari ad altri strumenti di segnalazione degli arresti anomali).
Tutto quello che serve è un qualche tipo di relazione scritta al 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
Esiste un modo per ottenere questo stack trace dal mio codice?
Può essere una seconda attività definita all'interno del tuo apk - non è necessario installare una seconda app –
Sì, ma questo richiederebbe il READ_LOGS, la strega potrebbe causare qualche sospetto agli utenti – scooterman