Отладка Android NDK и вопросительные знаки в обратном следе - PullRequest
1 голос
/ 26 февраля 2012

прежде чем я скажу что-нибудь еще, позвольте мне начать с заявления о том, что программное обеспечение совершенно нормальное, оно взято из примеров Android и не вылетает:).

Моя команда изо всех сил пыталась получить вменяемыйследы от андроида в последнее время.Мы получаем выходные данные из LibC и ... кажется, что это единственный компонент, от которого мы получаем действительные обратные следы.Что-нибудь еще генерирует только вопросительные знаки и неглубокие следы (так что обычно оно ломается сначала ?? , больше ничего не показывается после этой точки, поэтому мы обычно видим - например - только vsnprintf и... вот и все.

Мы экспериментировали и в итоге создали совершенно новый проект, почти полностью скопированный из образцов: native-activity, с несколькими изменениями:

  • В AndroidManifest.xml установлены правильные флаги:

    <application android:label="@string/app_name" 
        android:hasCode="false" android:debuggable="true" >
    
  • build.xml имеет правило предварительной сборки:

     <target name="-pre-build">
         <exec executable="${env.ANDROID_NDK}/ndk-build" failonerror="true">
             <arg value="NDK_DEBUG=1" />
         </exec>
     </target>
    
  • Application.mk имеет определение:

    APP_OPTIM := debug
    
  • даже Android.mk Файл был немного подправлен:

    LOCAL_MODULE    := test
    LOCAL_SRC_FILES := main.c
    LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM
    LOCAL_STATIC_LIBRARIES := android_native_app_glue
    LOCAL_CFLAGS := -g3 -ggdb -O0
    LOCAL_CPPFLAGS := -g3 -ggdb -O0
    include $(BUILD_SHARED_LIBRARY)
    

мы экспериментировали с -gstabs+ и -g -ggdb, но это все равно дает нам ту же обратную трассировку:

(gdb) bt
#1  0x4005b384 in epoll_wait () from libc.so
#2  0x40120eaa in ?? ()

второй вызов - без сомнения - нативный код, скорее всегоALooper_pollAll, который вызывает libc epoll_wait., Но нет ссылки на android_main.

Код отлично хорошо.Я могу нажать c и дать ему поработать часами без сбоев, но остановив его и напечатав обратную трассировку - независимо от того, когда - всегда возвращаются одни и те же две строки.

Мы будем очень признательны за любую помощьи предложения;у нас возникли проблемы с нашим продуктом, и ... единственное, о чем мы можем сейчас думать, это по-настоящему средневековое.

1 Ответ

0 голосов
/ 01 апреля 2012

хорошо, после еще нескольких расследований, мы выяснили.в некоторых случаях наш обратный след имел 20 или более уровней, в некоторых он почти полностью исчез.причина в том, что библиотеки Android, которые используются для нативного программирования, обычно лишены символов отладки и оптимизированы, и поэтому система не может предоставить больше подробностей, чем указано в нашем / вашем коде.

, который сказал,отладка нативного кода на реальных устройствах часто практически невозможна ...

...