我试图调试使用adb外壳程序,一方gdbserver和另一方面ndk的gdb的本机构建(NDK)可执行测试(+共享库)。交叉调试时不同步的符号android ndk
我复制的可执行文件和.so到设备,并在亚行shell中执行:
$ gdbserver :5039 ./my_test my_args
Process ./my_test created; pid = 11131
Listening on port 5039
我在同my_test可执行文件运行GDB在主机:
$ $NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gdb ./my_test
将断点在main():
Reading symbols from /.../my_test...done.
(gdb) target remote :5039
Remote debugging using :5039
warning: Unable to find dynamic linker breakpoint function.
GDB will retry eventurally. Meanwhile, it is likely
that GDB is unable to debug shared library initializers
or resolve pending breakpoints after dlopen().
0xb6f71a60 in ??()
(gdb) b main
Cannot access memory at address 0x0
warning: (Internal error: pc 0xa468 in read in psymtab, but not in symtab.)
warning: (Internal error: pc 0xa468 in read in psymtab, but not in symtab.)
warning: (Internal error: pc 0xa468 in read in psymtab, but not in symtab.)
warning: (Internal error: pc 0xa46c in read in psymtab, but not in symtab.)
warning: (Internal error: pc 0xa468 in read in psymtab, but not in symtab.)
...
当钩住Eclipse作为远程调试“下一个语句”跳到不同PL在尝试逐步执行代码时在代码中使用Aces。这与我在gdb中执行一系列'next'命令时看到的是一样的。
设备上的gdbserver版本是7.6。
任何想法?
更新:
建设GDB 7.6.2,并使用它,而不是其自带的NDK版本我有GDB 7.3.1-GG后(r9d 64位),这些警告内部的消息错误消失了。
剩下的是代码和调试之间缺乏同步。我使用NDK_DEBUG = 1构建了代码,并将可执行文件和.so从.obj dir复制到设备,但是仍然从'gdb + gdbserver'进行分步调试时,从gdb看到的程序流程不会有道理。
你可以尝试推送你的NDK的gdb并使用它。作为快速黑客,任何机会,你可以重命名(或包装)你的主要功能,使其兼容Jni,并有一个空的Java应用程序创建一个线程并调用你的本地代码,让你使用正常的ndk调试过程?您也可以尝试在示例应用程序上执行正常的ndk调试会话,同时观察确切发生的情况 - gdb选项和命令等。另一个经常有效的选择是简单地为开发机器构建代码并在其中进行调试。 – 2014-08-27 14:43:21