Я пытаюсь отладить собственный встроенный (NDK) исполняемый тест (+ общая библиотека), используя оболочку adb, gdbserver с одной стороны и gdb ndk с другой стороны.
Я скопировал исполняемый файл и .so на устройство и выполнил в оболочке adb:
$ gdbserver :5039 ./my_test my_args
Process ./my_test created; pid = 11131
Listening on port 5039
На хосте я запускаю gdb с тем же исполняемым файлом my_test:
$ $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 в качестве удаленной отладки «следующий оператор» переходит в разные места кода, когда я пытаюсь выполнить пошаговый код. Это то же самое, что я вижу, когда выполняю серию команд «следующая» в gdb.
Версия gdbserver на устройстве 7.6.
Любые идеи?
Обновление:
После сборки gdb 7.6.2 и использования его вместо gdb 7.3.1-gg, который поставляется с выпуском NDK, который у меня есть (r9d 64-бит), эти предупреждающие сообщения о внутренней ошибке исчезли.
Остается отсутствие синхронизации между кодом и отладкой. Я построил код с NDK_DEBUG=1 и скопировал исполняемый файл и .so из каталога .obj на устройство, но все же, когда я выполняю «пошаговую» отладку из gdb+gdbserver, поток программы, как видно из gdb, не иметь смысл.