【发布时间】:2012-02-25 21:01:44
【问题描述】:
在我再说什么之前,让我先声明一下该软件非常健全,它取自 Android 示例并且不会崩溃:)。
我的团队最近一直在努力从 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 让它运行几个小时而不会发生任何崩溃,但停止它并打印回溯 - 无论何时 - 总是返回相同的两行。
我们非常感谢所有帮助和建议;我们的产品遇到了一些麻烦,而且我们现在能想到的唯一方法是真正的中世纪。
【问题讨论】:
标签: android android-ndk java-native-interface backtrace