Приложение с использованием NDK (нативный код) падает. Как я могу узнать почему?
Мое приложение использует NDK (4r-crystax в моем случае) для обработки изображений с камеры. Проблема в том, что он падает после нескольких минут работы. Я предполагаю, что могут быть некоторые утечки памяти или что-то подобное, но я не знаю, как узнать, где проблема. Это журнал вокруг этой ошибки:
04-14 23:07:37.133: INFO/NATIVE CODE(14895): Detection percentage counted.
04-14 23:07:37.163: DEBUG/MDDetectorView(14895): Some debug info
04-14 23:07:37.193: DEBUG/dalvikvm(14895): GC_EXTERNAL_ALLOC freed 19 objects / 872 bytes in 27ms
04-14 23:07:37.283: INFO/NATIVE CODE(14895): Image to proccess loaded.
04-14 23:07:37.493: INFO/ActivityManager(92): Process com.motiondetector (pid 14895) has died.
04-14 23:07:37.493: DEBUG/CameraService(67): Client::~Client E (pid 67, client 0xad08)
04-14 23:07:37.503: INFO/WindowManager(92): WIN DEATH: Window{46590698 com.motiondetector/com.motiondetector.MDMenuActivity paused=false}
04-14 23:07:37.513: ERROR/CameraService(67): getClientFromCookie: client appears to have died
Есть идеи? Есть ли полезные инструменты, чтобы помочь мне найти ответ?
Возможно ли, что Android убивает активность на экране во время обработки нативного кода?
1 ответ
Решение
Если вы используете NDK r5 или выше, вы можете использовать ndk-gdb
Скрипт для запуска вашей программы и подключения к ней через GDB. Если ваш собственный код дает сбой, он должен перетащить вас в командную строку GDB, где вы можете исследовать область кода, которая вызывает проблему.