Android ndk gdb 加载的共享库缺少 *.oat

Android ndk gdb loaded shared libraries are missing *.oat

提问人:Joey.Z 提问时间:2/5/2018 最后编辑:AmolJoey.Z 更新时间:10/11/2023 访问量:2303

问:

在调试我的设备(oppo r7s)时,两者都错过了一些共享库。我已将所有库都拉到本地
以下是
gdb 7.7gbd 7.11info shared

(gdb) info shared
From        To          Syms Read   Shared Object Library
0x40000980  0x40009640  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\linker
0x401c7940  0x401ce6e8  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libutils.so
                        No          libstdc++.so
                        No          libm.so
0x4013bbb0  0x4017329c  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libc.so
                        No          libbinder.so
                        No          liblog.so
                        No          libhardware.so
                        No          libcutils.so
                        No          libc++.so
                        No          libLLVM.so
                        No          libbcinfo.so
                        No          libunwind.so
                        No          libz.so
                        No          libpng.so
                        No          libpowermanager.so
                        No          libcommon_time_client.so
                        No          libstlport.so
                        No          libui.so
                        No          libsync.so
                        No          libgui.so
                        No          libft2.so
                        No          libbcc.so
                        No          libGLESv2.so
                        No          libGLESv1_CM.so
                        No          libEGL.so
                        No          libunwind-ptrace.so
                        No          libgccdemangle.so
                        No          libcrypto.so
                        No          libicuuc.so
                        No          libicui18n.so
                        No          libjpeg.so
                        No          libexpat.so
                        No          libpcre.so
                        No          libharfbuzz_ng.so
                        No          libstagefright_foundation.so
                        No          libsonivox.so
                        No          libnbaio.so
                        No          libcamera_client.so
                        No          libaudioutils.so
                        No          libaudioparameter.so
                        No          libinput.so
                        No          libhardware_legacy.so
                        No          libcamera_metadata.so
                        No          libgabi++.so
                        No          libskia.so
                        No          libRScpp.so
                        No          libRS.so
                        No          libwpa_client.so
                        No          libnetutils.so
                        No          libspeexresampler.so
0x402635b0  0x402724a4  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libandroidfw.so
                        No          libGLES_trace.so
                        No          libbacktrace.so
                        No          libusbhost.so
                        No          libssl.so
                        No          libsqlite.so
                        No          libsoundtrigger.so
                        No          libselinux.so
                        No          libprocessgroup.so
                        No          libpdfium.so
                        No          libnetd_client.so
                        No          libnativehelper.so
                        No          libnativebridge.so
                        No          libminikin.so
                        No          libmemtrack.so
                        No          libmedia.so
                        No          libinputflinger.so
                        No          libimg_utils.so
                        No          libhwui.so
                        No          libassert_tip_service.so
                        No          libETC1.so
0x4006d230  0x400ca9dc  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libandroid_runtime.so
                        No          libNimsWrap.so
                        No          libsigchain.so
                        No          libvendorconn.so
                        No          libbacktrace_libc++.so
0x41d4baa0  0x41f9ee24  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libart.so
                        No          libjavacore.so
                        No          memtrack.msm8916.so
                        No          libqti-perfd-client.so
                        No          libtinyxml.so
                        No          libqservice.so
                        No          libmm-abl-oem.so
                        No          libdiag.so
                        No          libmm-abl.so
                        No          libprotecteyes.so
                        No          libgsl.so
                        No          libadreno_utils.so
                        No          libEGL_adreno.so
                        No          libGLESv1_CM_adreno.so
                        No          libGLESv2_adreno.so
0x68246388  0x68249184  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libandroid.so
                        No          libcompiler_rt.so
                        No          libjnigraphics.so
                        No          libvorbisidec.so
                        No          libstagefright_yuv.so
                        No          libstagefright_omx.so
                        No          libstagefright_enc_common.so
                        No          libstagefright_avc_common.so
                        No          libopus.so
                        No          libdrmframework.so
                        No          libstagefright_amrnb_common.so
                        No          libstagefright.so
                        No          libmtp.so
                        No          libjhead.so
                        No          libexif.so
                        No          libmedia_jni.so
                        No          libjavacrypto.so
                        No          libsoundpool.so
                        No          libaudioeffect_jni.so
                        No          librs_jni.so
                        No          libthwsplit.so
                        No          libwebviewchromium_loader.so
                        No          eglsubAndroid.so
                        No          libsc-a3xx.so
                        No          libqdutils.so
                        No          libqdMetaData.so
                        No          libmemalloc.so
                        No          gralloc.msm8916.so
                        No          libfmodex.so
                        No          libfmodevent.so
                        No          libstagefright_http_support.so
                        No          libeffects.so
                        No          libwilhelm.so
                        No          libOpenSLES.so
0x7f9ceb40  0x8102f72c  Yes         Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libclient.so
                        No          libwebviewchromium.so
                        No          libwebviewchromium_plat_support.so
(*): Shared library is missing debugging information.

但是在调试华为(FRD-AL00)等其他设备时会加载文件。
以下是此类设备上输出的摘录。
oatshow shared

0x71867000  0x71cc76d6  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\system@[email protected]
0x721dc000  0x725657c4  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\system@[email protected]
0x725dc000  0x7262d9cc  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\system@[email protected]
0x726c3000  0x727291ea  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\system@[email protected]
0xea0de584  0xea0e5714  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libandroid.so
0xe1b15da0  0xe1cdc3ec  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libart-compiler.so
                        No          /system/lib/libvixl.so
0xc2b0ab40  0xc416b72c  Yes         Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libclient.so
                        No          /data/dalvik-cache/arm/system@app@[email protected]@classes.dex

如果没有加载库,gdb 就无法正确展开堆栈,oppo 中的回溯:

(gdb) bt
#0  0x40168698 in __epoll_pwait () from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libc.so
#1  0x4013f746 in epoll_pwait () from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libc.so
#2  0x4013f754 in epoll_wait () from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libc.so
#3  0x401cdf56 in android::Looper::pollInner(int) () from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libutils.so
#4  0x401ce180 in android::Looper::pollOnce(int, int*, int*, void**) ()
   from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libutils.so
#5  0x4009c7dc in android::NativeMessageQueue::pollOnce(_JNIEnv*, int) ()
   from Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libandroid_runtime.so
#6  0x72403cdc in ?? ()

最后一个地址位于system@[email protected]中,加载文件时也可以正常工作。oat

谁能给出一些建议?

安卓 android-ndk gdb gdbserver

评论

2赞 ahasbini 2/14/2018
你的项目中有多个吗?面临类似的问题,Android Studio 由于错误地进行 gradle 同步而在其文件中出现错误......flavorsiml
0赞 Christian B 10/8/2019
您是否尝试过“add-symbol-file Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\system@[email protected]”或类似的东西?

答:

0赞 Atchaya Jayabal 10/11/2023 #1

此问题可能是由于 Oppo 设备上某些库缺少调试符号引起的。您可以尝试以下操作:

拉取所有库的完整调试符号文件。缺少调试符号(在信息共享输出中由“否”表示)会阻止 gdb 完全展开堆栈跟踪。

在设备上安装系统库的调试版本。您看到的 OAT 文件已加载到华为设备上,并包含允许 gdb 正确展开堆栈的调试信息。

使用完整的调试信息重新生成应用。确保使用 -g 进行编译以包含调试符号。这将确保 gdb 拥有应用库所需的所有信息。

将 gdb 更新到较新版本。有时,较新的 gdb 版本包含用于在 Android 上展开堆栈跟踪的修复。

作为最后的手段,您可以在 gdb 会话期间手动加载 Oppo 设备上的 .oat 文件。这将提供缺少的调试信息,并允许 gdb 正常展开。该命令如下所示:

add-symbol-file /path/to/system@[email protected] 0x71867000

您需要以这种方式加载所有相关的 .oat 文件。

总之,该问题可能是缺少 gdb 正确展开堆栈所需的调试符号。建议采用以下方法:拉取完整的调试符号、安装系统库的调试版本,以及确保应用具有完整的调试信息。