【发布时间】:2015-12-06 23:45:33
【问题描述】:
我正在尝试使用 lldb 从 Android Studio 的原生调试中调试一个 android 原生应用。
我的本机应用程序包含一个由 Android Studio 编译和运行的 libmain.so 和另一个由我编译的外部 libother.so。调试时,我可以在 libmain.so 中设置断点,但不能在 libother.so 中设置断点。
两个共享对象都被剥离,但不知何故,Android Studio 让 lldb 知道 libmain.so 的未剥离版本。我想为 libother.so 做同样的事情。
我需要向 lldb 提供什么命令,以便它从本地计算机上的未剥离文件中加载符号?
当我执行image list 时,我看到主 .so 带有指向其本地未剥离版本的路径:
/Users/username/Projects/gow/android/AppName/app/build/intermediates/binaries/debug/arm7/obj/armeabi-v7a/libmain.so
第二个 .so 的路径如下
/var/folders/3w/5nr95lxx3qvdm2ylb8c8b7500000gn/T/./lldb/module_cache/remote-android/.cache/B5F32653-0000-0000-0000-000000000000/libother.so
如何让 lldb 找到 libother.so 的未剥离版本?
我尝试了image add 和target symbols add,但没有成功。
【问题讨论】:
-
您是否使用 Gradle 构建应用程序?如果是这样,你能分享你的构建文件吗?也请分享您的 Android.mk 文件
-
我确实使用 gradle 构建它。构建文件与 Teapot 示例 (developer.android.com/ndk/samples/sample_teapot.html) 中的构建文件相同.用于构建 .so 的 Android.mk 也是在 Android Studio 支持之前用于与 ndk 一起构建的标准文件。它使用 clang 和 c++_static(太大,无法在此处添加)。我正在使用最新的 NDK
-
你是在windows上调试吗?我假设您提供的路径来自Android。 NDK 中还有一些已知的 bug;当使用 LLDB 断点进行调试时,在 Windows 上并不总是有效;如果遇到这种情况,您可以切换到 GDB 调试作为临时解决方法。
-
尝试使用 isDebuggable 和 isJniDebuggable 配置调试构建类型设置为 true tools.android.com/tech-docs/new-build-system/…
-
从OSX调试,我试过isDebuggable和isJniDebuggable,都没有效果。
标签: android debugging symbols lldb