Я разрабатываю на Android 2.3.x, используя NDK r5b. Иногда мой код падает, и я хотел бы знать, где. Я уже знаю, как получить соответствующую строку в моем приложении, когда у меня есть указатель (то есть из трассировки стека Android)
Однако, часто я вижу бесполезные трассировки стека, как это (полная трассировка стека):
#00 pc 0006561a /system/lib/egl/libGLESv2_adreno200.so
#01 pc 0006b900 /system/lib/egl/libGLESv2_adreno200.so
#02 pc 0005aac8 /system/lib/egl/libGLESv2_adreno200.so
#03 pc 0001687a /system/lib/egl/libGLESv1_CM_adreno200.so
#04 pc 000096ce /system/lib/egl/libGLESv1_CM_adreno200.so
или это:
(gdb) bt
#0 0xafd0c51c in epoll_wait () from /Volumes/SecureCode/webos/rta/android/obj/local/armeabi/libc.so
#1 0xa81216a6 in ?? ()
, которые вообще не упоминают мой код.
Есть ли какой-нибудь способ получить лучшие трассировки стека, чем этот? Почему некоторые библиотечные функции «непрозрачны» в том, что они не позволяют обратному следу «видеть сквозь» вызывающую функцию, вызывая остановку в трассировке стека?
Насколько я могу судить, единственный способ отладить подобную проблему - это использовать ведение журнала в каждой точке программы и / или проходить через каждую строку с помощью gdb.
Имеются ли ПЗУ с отладочными версиями этих библиотек Android вместо исполняемых, и это поможет? (Я использую один телефон исключительно для разработки, поэтому меня не интересует сохранение полной функциональности.) ( На самом деле , я заметил, что путь к libc.so
в приведенном выше gdb
трассировка стека находится в каталоге моего приложения. Могу ли я просто упаковать его с другим (отладка) libc.so
, и это поможет?)
Последнее, что может помочь: в приведенной выше трассировке стека от logcat (первая) моя библиотека упоминается в дампе необработанного стека:
stack:
...
...
4471cb88 00000028
4471cb8c afd4649c
4471cb90 80b4eb71 /data/data/com.audia.dev.rta/lib/librta.so
4471cb94 00299180
...
...
но это не указатель на функцию. Что бы это могло быть, и будет ли это чем-то полезным после сбоя приложения? Наверное, нет, если это указатель кучи или что-то в этом роде.