Android Отладка нативного кода

Я использую ndk-r9 и пытаюсь заставить ndk-gdb работать на меня. Я запустил небольшое приложение для Android под названием LittlestAndroid, которое делает простой вызов нативного метода C ++, который возвращает жестко закодированную строку. Приложение строит / устанавливает / работает просто отлично. Теперь я переназначаю приложение, чтобы узнать о ndk-gdb. Я установил debuggable = «true» в манифесте. Я установил эти env vars в моей модели:

APP_OPTIM=debug
LOCAL_CFLAGS := -g

и я взломал файл $ NDK_HOME / build / core / build-binary.mk, чтобы условно удалить символы отладки, используя следующее:

$(LOCAL_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries
@$(HOST_ECHO) "Install        : $(PRIVATE_NAME) => $(call pretty-dir,$(PRIVATE_DST))"$(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))
#   $(hide) $(PRIVATE_STRIP_CMD)
# CCC Modifications start
ifneq ($(APP_OPTIM),debug)
@ $(HOST_ECHO) "Stripping the library for the release mode....."$(hide) $(PRIVATE_STRIP_CMD)
endif
# CCC Modifications end
#$(hide) $(PRIVATE_OBJCOPY_CMD)

$(call generate-file-dir,$(LOCAL_INSTALLED))

endif

Когда я пытаюсь отладить эмулятор, я получаю следующее:

~/workspace/LittlestAndroid$ ndk-gdb -s emulator-5554 --start
java.io.IOException: handshake failed - connection prematurally closed
at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)

Fatal error:
Unable to attach to target VM.
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>.
warning: Could not load shared library symbols for 66 libraries, e.g. libstdc++.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Breakpoint address adjusted from 0x40005a53 to 0x40005a52.
0x400380e0 in __futex_syscall3 () from /Users/clifton/workspace/LittlestAndroid/obj/local/armeabi/libc.so
(gdb) quit
A debugging session is active.

Inferior 1 [Remote target] will be detached.

Quit anyway? (y or n) y
Ending remote debugging.

После выхода и повторной попытки присоединить gdb (не нажимая «принудительно закрыть» на эмуляторе), я получаю следующее:

~/workspace/LittlestAndroid$ ndk-gdb -s emulator-5554
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>.
warning: Could not load shared library symbols for 66 libraries, e.g. libstdc++.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Breakpoint address adjusted from 0x40005a53 to 0x40005a52.
0x400380e0 in __futex_syscall3 () from /Users/clifton/workspace/LittlestAndroid/obj/local/armeabi/libc.so
(gdb) c
Continuing.

Я что-то упускаю или делаю что-то не так? В любом случае я не могу подключить отладчик и / или возобновить выполнение моего приложения. Я также попытался установить точки останова после запуска ndk-gdb, но я получаю следующее:

(gdb) b libs/info.cpp:7
No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (libs/info.cpp:7) pending.
(gdb)

Кто-нибудь когда-нибудь успешно запускал ndk-gdb, и если да, могли бы вы дать руководство? Я гуглил повсюду, но я не мог найти ничего, кроме самых основных руководств, и ничего не углубляется в объяснение того, как на самом деле устанавливать точки останова (я использую относительные пути к моему cpp, как указано выше, или просто указываю базовое имя файла?) Или как чтобы устранить ошибки, которые я вижу.

ОБНОВИТЬ
Я только что нашел этот вопрос который, кажется, указывает на проблему в ndk-r9. Я скачаю более раннюю версию и попробую.

4

Решение

Да, действительно есть проблема с последними инструментами отладки ndk-r9. После понижения до версии 8e все, кажется, работает как рекламируется.

Обновить

Я только что попробовал последний 9d NDK, и проблема все еще существует, хотя ошибка немного отличается. Я попытался отладить свое приложение на Motorola G под управлением 4.4, и отладчик выдал ошибку сокета, пытаясь установить соединение.

2-е обновление
Я думал об этой древней проблеме, задаваясь вопросом, имеет ли NDK сродство с конкретной ОС. Другими словами, последние версии NDK работают с более поздними ОС? Я попробовал V9 на 4.4 и потерпел неудачу, но 9 будет работать на 5.0 или 5.5? Пища для размышлений …

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]