Android: в gdbserver не найдено символов отладки
Я пытаюсь прикрепить процесс на своем рутированном Android и создать corefile с помощью GDB, но он не может создать файл gcore, потому что символы не могут быть найдены.
на моем телефоне я открываю приложение Terminal и вводлю
su
предоставить root-доступ в Терминале. я ввожу
dumpsys meminfo
показать все запущенные процессы. я ввожу
gdbserver :1234 --attach 5132
на моем компьютере я открываю gdb.exe (из Android NDK) и вводлю
(gdb) target remote 192.168.1.13:1234
и я получил эту информацию
(gdb) target remote 192.168.1.13:1234
Remote debugging using 192.168.1.13:1234
warning: Architecture rejected target-supplied description
Reading /system/bin/app_process32_original from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
warning: A handler for the OS ABI "Cygwin" is not built into this configuration
of GDB. Attempting to continue with the default arm settings.
Reading /system/bin/app_process32_original from remote target...
warning: A handler for the OS ABI "Cygwin" is not built into this configuration
of GDB. Attempting to continue with the default arm settings.
Reading symbols from target:/system/bin/app_process32_original...(no debugging symbols found)...done.
0xb6e8b0f8 in ?? ()
С моим собственным скомпилированным gdb.exe я получил другую информацию
(gdb) target remote 192.168.1.13:1234
Remote debugging using 192.168.1.13:1234
warning: Can not parse XML target description; XML support was disabled at compile time
Reading /system/bin/app_process32_original from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /system/bin/app_process32_original from remote target...
Reading symbols from target:/system/bin/app_process32_original...(no debugging symbols found)...done.
Remote 'g' packet reply is too long: fcffffff605fd9be10000000ffffffff0000000008000000000000005a010000a87687b414000000000000004010c032105fd9be005fd9be1352e6b6f8b0e8b610000f204a280000000000003d0000001100000000000000000000006000000004000000d002000068010000680100003702000052000010110000001600000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a28000072002e0073006500720076006900630065002e0056006f006900700043006f006e006e006500630074006f0072005300e83bb770e83bb77088639b70e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb770e83bb77011000060
0xb6e8b0f8 in ?? ()
Я печатаю
gcore
и это говорит
Can't create a corefile
Я установил правильный двоичный файл gdbserver, который соответствует моей архитектуре ядра, в / system / bin
Я пробовал разные ОС Android ниже Android 4.4.4, у которого нет функции защиты от ПИРОГА, но я все еще получаю ту же проблему. Я попытался использовать перенесенную версию клиента GDB, и она работает отлично.
Я просто хочу сохранить основной файл на своем мощном устройстве под управлением Android 5.1.1 с 2 ГБ ОЗУ, вместо этого используя клиент gdb на моем младшем планшете, который имеет 512 МБ ОЗУ и работает под управлением Android 4.4.4, и GDB не может полностью создать corefile из-за недостатка оперативной памяти.
2 ответа
Просто скачайте исходный код gdb и скомпилируйте его с помощью следующих шагов:
1). Скомпилируйте GDB с помощью следующей команды:
cd gdb-7.11/gdb
./configure --target=arm-linux-androideabi --with-python --prefix=$HOME/mybinaries/bin
make
make install
2). Скомпилируйте gdbserver с помощью следующей команды:
cd gdb-7.11/gdb/gdbserver
CC=arm-linux-androideabi-gcc LDFLAGS="-fPIC -pie" ./configure --target=arm-linux-androideabi --host=arm-linux-androideabi --prefix=$HOME/mybinaries/bin
make
make install
При компиляции GDB я должен указать цель --target arm-linux-androideabi
вместо --target arm-eabi
и работает отлично