Программа обработки сбоев в Android, которая называется debuggerd, записывает только часть стека в журнал, но записывает полный стек в файл захоронения. Это жестко запрограммировано в system / core / debuggerd / debuggerd.c.
Посмотрите в подпрограмме debug_stack_and_code () вызовы _LOG (). Второй параметр _LOG контролирует, идет ли материал только к надгробной плите или к журналу и надгробной плите.
Где вы видите (sp_depth>2||only_in_tombstone)
, вы можете изменить 2 на что-то другое, чтобы получить более глубокие кадры стека, сообщаемые в журнале. Это предполагает, что вы можете перекомпилировать debuggerd и заменить его в своей системе. Если нет, то вы застряли в проверке самих файлов-захоронений для более длинных дампов стека.
Дампы создаются debuggerd при сбое программы под Linux. Когда это произойдет, ядро отправит сигнал умирающей программе. Этот сигнал улавливается специальным обработчиком сигнала, установленным в каждом приложении Android. по бионической C-библиотеке. Обработчик сигнала связывается с debuggerd (через именованный канал), который затем подключается обратно к умирающей программе, используя ptrace для чтения регистров и памяти для создания надгробной плиты и записей журнала.