1

我用 ndk-build 构建了一个原生库,它在 Android.mk 中被标记为可调试。如果我进入 cygwin shell 并运行

cd (PROJDIR)
ndk-gdb --start --verbose

我得到以下信息:

Android NDK installation path: /cygdrive/c/Android/android-ndk-r7b
Using default adb command: /cygdrive/c/Android/android-sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using ADB flags: 
Using auto-detected project path: .
Found package name: tiny.test2
ABIs targetted by application: armeabi
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Found debuggable flag: true
Found device gdbserver: /data/data/tiny.test2/lib/gdbserver
Using gdb setup init: ./libs/armeabi/gdb.setup
Using toolchain prefix: /cygdrive/c/Android/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi
Found data directory: '/data/data/tiny.test2'
Found first launchable activity: .Test2Activity
Launching activity: tiny.test2/.Test2Activity
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell am start -n tiny.test2/.Test2Activity
Starting: Intent { cmp=tiny.test2/.Test2Activity }

## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell sleep 2
Found running PID: 0
ERROR: Could not extract PID of application on device/emulator.
       Weird, this probably means one of these:

         - The installed package does not match your current manifest.
         - The application process was terminated.

       Try using the --verbose option and look at its output for details.

它没有到达 gdb 提示符进行调试。我尝试在第一次 C++ 函数调用之前使用 .java 文件中的断点从 Eclipse 启动它,然后在运行 ndk-gdb 的 java 断点处,它成功找到运行 PID 1977,通过端口 5039 连接到设备,并从设备中拉出 libc.so,但随后得到了Error while mapping shared library sections: libxxxx.so: No such file or directory. 中找不到符号info sharedLibrary

我已LOCAL_CFLAGS := -g -ggdb -O0根据另一个问题的建议添加到 Android.mk,并从中删除了$(NDK_PATH)/build/core/build-binary.mk从 .so 文件中删除附加内容的行。

如果有人知道这些错误的可能原因,请提供帮助。

谢谢

编辑:ndk-gdb 告诉我 '这个 GDB 被配置为 "--host-i586-mingw32msvc --target=arm-elf-linux"' 在 '(没有找到调试符号)' 之前

这意味着什么吗?

EDIT2:share从 gdb 运行返回Symbol file not found所有 .so 文件的 s 列表。在我看来,这就像我没有正确生成符号文件,或者它们没有包含在搜索路径中。它们应该设置在哪里?

EDIT3:原来我错过了 ndk-gdb 文档中的重要行 -

   "The GDB prompt will be preceded by a long list of error messages,
   where gdb complains that it cannot find various system libraries
   (e.g. libc.so, libstdc++.so, liblog.so, libcutils.so, etc...)

   This is normal, because there are no symbol/debug versions of
   these libraries corresponding to your target device on your
   development machine. You can safely ignore these messages."

这并不能解决问题,但有助于知道这些不是错误。

4

1 回答 1

0

你有环境 ANDROID_NDK_ROOT 吗?在 Windows 下必须像 /cygdrive/c/Android/android-ndk-r7* 一样。尝试添加 DNK_DEBUG=1 编译.. 像:ndk-build DNK_DEBUG=1 -BV=1

另外,请确保您在 libs/$(Target-ABI)/ 下同时拥有 gdbserver 和 gdb.set

希望能帮助你。

于 2012-04-23T01:19:18.657 回答