NDK zawiera skrypt powłoki o nazwie ndk-gdb
, który uruchamia
sesja debugowania natywnego wiersza poleceń. Użytkownicy, którzy wolą korzystać z GUI, powinni
przeczytaj dokumentację debugowania w
Android Studio.
Wymagania
Aby debugowanie natywne w wierszu poleceń działało, muszą być spełnione te wymagania:
- Utwórz aplikację, korzystając ze skryptu
ndk-build
. Skryptndk-gdb
nie obsługuje używania starszej metodymake APP=<name>
do tworzenia kompilacji. - Włącz debugowanie aplikacji w pliku
AndroidManifest.xml
, dodając parametr Element<application>
ustawiający atrybutandroid:debuggable
natrue
. - Utwórz aplikację pod kątem systemu Android 2.2 (Android API na poziomie 8) lub nowszego.
- Debuguj na urządzeniu lub emulatorze z Androidem 2.2 lub nowszym.
Do celów debugowania parametr docelowy
Poziom interfejsu API zadeklarowany w pliku
AndroidManifest.xml
nie ma znaczenia. - Twórz aplikacje w powłoce Unix. w systemie Windows używaj Cygwin;
lub eksperymentalny
ndk-gdb-py
Python implementacji. - Użyj programu GNU Make 3.81 lub nowszego.
Wykorzystanie
Aby wywołać skrypt ndk-gdb
, przejdź do katalogu aplikacji lub dowolnego katalogu
. Na przykład:
cd $PROJECT $NDK/ndk-gdb
W tym miejscu $PROJECT
wskazuje katalog główny Twojego projektu, a $NDK
wskazuje katalog główny
Ścieżka instalacji NDK.
Gdy wywołujesz funkcję ndk-gdb
, konfiguruje ona sesję wyszukiwania plików źródłowych
oraz wersji symboli i debugowania wygenerowanych bibliotek natywnych. Po podłączeniu do
procesu aplikacji, ndk-gdb
zwraca serię komunikatów o błędach i informuje, że nie może
znajdziesz różne biblioteki systemowe. Jest to normalne, ponieważ host nie zawiera
symboli/debugowania wersji tych bibliotek na urządzeniu docelowym. Możesz to bezpiecznie zignorować
wiadomości.
Następnie ndk-gdb
wyświetla zwykły prompt GDB.
Z ndk-gdb
możesz korzystać w taki sam sposób jak w GNU GDB. Możesz na przykład:
użyj b <location>
, aby ustawić punkty przerwania, a c
(aby kontynuować),
wznów wykonanie zadania. Pełną listę poleceń znajdziesz w
Instrukcja obsługi GDB. Jeśli wolisz używać
Debuger LLDB, użyj --lldb
przy wywoływaniu skryptu ndk-gdb
.
Pamiętaj, że po zamknięciu promptu GDB proces aplikacji, który debugujesz, zostanie zatrzymany. Ten jest ograniczeniem GDB.
ndk-gdb
obsługuje wiele warunków błędów i wyświetla informacyjne komunikaty o błędach, jeśli
znajduje problem. weryfikacje te obejmują sprawdzenie, czy spełnione są te warunki:
- Sprawdza, czy na ścieżce jest ADB.
- Sprawdza, czy w pliku manifestu aplikacji zadeklarowano możliwość debugowania.
- Sprawdza, czy na urządzeniu zainstalowana aplikacja o tej samej nazwie pakietu jest również .
Domyślnie ndk-gdb
wyszukuje uruchomiony proces aplikacji i wyświetla komunikat
jeśli go nie znajdzie. Możesz jednak użyć usługi --start
lub
--launch=<name>
, aby automatycznie rozpoczynać aktywność przed debugowaniem
. Więcej informacji znajdziesz w artykule Opcje.
Opcje
Aby zobaczyć pełną listę opcji, wpisz ndk-gdb --help
w wierszu poleceń. Tabela 1
pokazuje kilka najczęściej używanych linków wraz z krótkimi opisami.
Od ndk-gdb
z tą opcją uruchamia pierwsze dostępne działanie na liście
w manifeście aplikacji. Użyj polecenia --launch=<name>
, aby uruchomić następny możliwy do uruchomienia element
działania. Aby skopiować listę działań możliwych do uruchomienia, uruchom --launch-list
z poziomu polecenia
.
Option | Opis> |
---|---|
--lldb |
Jeśli jest ustawiony, skrypt zamiast gdb będzie używać na potrzeby sesji debugera LLDB. |
--verbose |
Ta opcja informuje system kompilacji, że ma wydrukować szczegółowe informacje o debugowaniu natywnym
konfiguracji sesji. Jest to konieczne tylko w przypadku rozwiązywania problemów, gdy debuger nie może połączyć się z
aplikacji i komunikaty o błędach wyświetlane przez |
--force |
Domyślnie ndk-gdb przerywa działanie, jeśli wykryje, że inna sesja debugowania natywnego została już przeprowadzona
które działają na tym samym urządzeniu. Ta opcja kończy drugą sesję i zastępuje ją nową.
Pamiętaj, że ta opcja nie powoduje zakończenia debugowania debugowanej aplikacji – musisz ją wyłączyć.
oddzielnie. |
--start |
Po uruchomieniu |
--launch=<name> |
Ta opcja jest podobna do |
--launch-list |
Ta wygodna opcja umożliwia wydrukowanie listy wszystkich nazw działań możliwych do uruchomienia w
manifestu aplikacji. |
--project=<path> |
Ta opcja określa katalog projektu aplikacji. Przydaje się, jeśli chcesz uruchomić w dowolnym momencie bez konieczności przechodzenia do katalogu projektu. |
--port=<port> |
Domyślnie |
--adb=<file> |
Ta opcja określa parametr adb . Jest to konieczne tylko wtedy, gdy nie ustawiono ścieżki obejmującej dany plik wykonywalny. |
-d -e -s <serial> |
Te flagi są podobne do poleceń adb o tych samych nazwach. Ustaw te flagi, jeśli masz kilka urządzeń lub emulatorów podłączonych do hosta. Ich znaczenie jest następujące:
Możesz też zdefiniować zmienną środowiskową |
--exec=<file> -x <file> |
Dzięki tej opcji |
--nowait |
Wyłącz wstrzymywanie kodu Java do czasu połączenia z GDB. Pominięcie tej opcji może spowodować, że debuger aby przegapić początkowe punkty przerwania. |
--tui
-t |
Włącz tekstowy interfejs użytkownika, jeśli jest dostępny. |
--gnumake-flag=<flag> |
Ta opcja to dodatkowa flaga przekazywane do
|
Uwaga: ostatnie 3 opcje w tej tabeli dotyczą tylko
Wersja Pythona instancji ndk-gdb
.
Obsługa wątków
Jeśli Twoja aplikacja działa na platformie starszej niż Android 2.3 (poziom interfejsu API 9): ndk-gdb
nie może prawidłowo debugować wątków natywnych. Debuger może tylko debugować tylko wątek główny, całkowicie abd
ignoruje wykonanie innych wątków.
Jeśli umieścisz punkt przerwania w funkcji wykonanej w wątku innym niż główny, program wyjdzie, a funkcja GDB wyświetli ten komunikat:
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.