У меня много проблем с использованием gdbserver и gdbserver64 на Android и компаньона aarch64 gdb на моем хосте.Например, я сталкиваюсь с такими проблемами, когда gdb выводит то, что кажется бессмысленным:
(gdb) target remote :5039
Remote debugging using :5039
warning: Could not load vsyscall page because no executable was specified
try using the "file" command first.
0x0000007fa7921d2c in ?? ()
(gdb) bt
Python Exception <type 'exceptions.ImportError'> No module named gdb.frames:
#0 0x0000007fa7921d2c in ?? ()
#1 0x0000000040000600 in ?? ()
Backtrace stopped: Cannot access memory at address 0x22eee199476794f4
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000007f87c249b4 in ?? ()
(gdb) x/4i $pc
=> 0x7f87c249b4: ldrb w8, [x0,#432]
0x7f87c249b8: cbz w8, 0x7f87c249ec
0x7f87c249bc: ldr x8, [x19,#3632]
0x7f87c249c0: ldr x9, [x8,#24]
(gdb) bt
Python Exception <type 'exceptions.ImportError'> No module named gdb.frames:
#0 0x0000007f87c249b4 in ?? ()
#1 0x0000007fa4b4fb25 in ?? ()
#2 0x0000000000000001 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) c
Continuing.
[New Thread 22374]
[New Thread 22375]
Program received signal SIGSEGV, Segmentation fault.
0x0000007f87c249b4 in ?? ()
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x0000007f87c249b4 in ?? ()
Это практически невозможно использовать, поскольку все совершенно бесполезно.Никакие символы не загружены, и никакие обратные следы даже отдаленно не разумны.Приложение также неоднократно сигнализируется в местах, в которых оно не сигнализируется, когда выполняется трассировка или трассировка с использованием статического GDB (только для того, чтобы назвать одну конкретную проблему с ним).
Однако я смог использовать предварительно собранный armv7a статически связанный двоичный файл gdb для относительной отладки некоторых 32-разрядных приложений в эмуляторе Android.Я без проблем запустил статический GDB в оболочке устройства.У меня не было проблем с загрузкой символов и не было странных проблем с сигнализацией.
Я нигде не мог найти статически связанный двоичный файл aarch64 gdb, поэтому я попытался создать один из них в моем chroot aarch64.Мне удалось собрать gdb для aarch64, и я использовал эти флаги настройки :
LDFLAGS="-static" ../configure --prefix=/noprefix --enable-static --disable-shared --disable-interprocess-agent --disable-libcc1
Но он динамически связан, а это не то, что я хотел.
root@gram:/opt/gdb-aarch64/noprefix/bin# file gdb
gdb: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=f1a630e569467794c45b4389f510720c4342704b, not stripped
Как мне построить статически связанный Linux AARC64 GDB?