NDK zawiera skrypt powłoki o nazwie ndk-gdb, który umożliwia rozpoczęcie sesji debugowania na poziomie jądra za pomocą wiersza poleceń (wcześniej używano do tego polecenia gdb, ale teraz lldb).
Użytkownicy, którzy wolą korzystać z interfejsu graficznego, powinni zapoznać się z dokumentacją dotyczącą debugowania w Android Studio.
Wymagania
Aby debugowanie na poziomie wiersza poleceń działało prawidłowo, musisz spełnić te wymagania:
- Utwórz aplikację za pomocą skryptu ndk-build. Skryptndk-gdbnie obsługuje kompilacji za pomocą starszej metodymake APP=<name>.
- Aby włączyć debugowanie aplikacji w pliku AndroidManifest.xml, dodaj element<application>, który ustawia atrybutandroid:debuggablena wartośćtrue.
- Utwórz aplikację, która będzie działać na Androidzie 2.2 (Android API na poziomie 8) lub nowszym.
- Debugowanie na urządzeniu lub emulatorze z Androidem 2.2 lub nowszym.
 Na potrzeby debugowania nie ma znaczenia docelowy poziom interfejsu API zadeklarowany w pliku AndroidManifest.xml.
- Tworzenie aplikacji w powłoce Unix. W systemie Windows użyj Cygwin lub eksperymentalnej ndk-gdb-pyimplementacji Pythona.
- Użyj GNU Make w wersji 3.81 lub nowszej.
Wykorzystanie
Aby wywołać skrypt ndk-gdb, przejdź do katalogu aplikacji lub dowolnego katalogu w jego obrębie. Przykład:
cd $PROJECT $NDK/ndk-gdb
Tutaj $PROJECT wskazuje katalog główny projektu, a $NDK – ścieżkę do instalacji NDK.
Gdy wywołasz ndk-gdb, sesja jest konfigurowana tak, aby szukać plików źródłowych i wersji symbolicznych/debugowych wygenerowanych bibliotek natywnych. Po pomyślnym dołączeniu do procesu aplikacji ndk-gdb wyświetla długą serię komunikatów o błędach, w których informuje, że nie może znaleźć różnych bibliotek systemowych. Jest to normalne, ponieważ maszyna hosta nie zawiera wersji tych bibliotek z symbolami ani wersji debugowania na urządzeniu docelowym. Możesz zignorować te wiadomości.
Następnie ndk-gdb wyświetla zwykły wiersz poleceń lldb.
Interakcje z ndk-gdb są takie same jak w przypadku lldb.
Jeśli nie znasz LLDB, ale znasz GDB, zapoznaj się z [mapą poleceń GDB na LLDB](https://lldb.llvm.org/use/map.html).
ndk-gdb obsługuje wiele warunków błędu i wyświetla komunikat o błędzie, jeśli znajdzie problem. Te kontrole obejmują sprawdzenie, czy spełnione są te warunki:
- Sprawdzanie, czy ADB znajduje się na ścieżce.
- Sprawdzanie, czy aplikacja jest deklarowana jako debugowana w pliku manifestu.
- Sprawdza, czy zainstalowana aplikacja o tej samej nazwie pakietu jest też dostępna do debugowania na urządzeniu.
Domyślnie ndk-gdb wyszukuje proces aplikacji, który jest już uruchomiony, a jeśli go nie znajdzie, wyświetla błąd. Możesz jednak użyć opcji --start lub
--launch=<name>, aby automatycznie uruchomić aktywność przed sesją debugowania. Więcej informacji znajdziesz w sekcji Opcje.
Opcje
Aby wyświetlić pełną listę opcji, wpisz ndk-gdb --help w wierszu poleceń. Tabela 1 zawiera kilka najczęściej używanych funkcji wraz z ich krótkimi opisami.
Tabela 1. Typowe opcje ndk-gdb i ich opisy
Uruchomienie ndk-gdb z tą opcją powoduje uruchomienie pierwszej aktywności, która może być uruchomiona w pliku manifestu aplikacji. Aby rozpocząć następną aktywność, kliknij --launch=<name>. Aby wygenerować listę aktywnych działań, uruchom --launch-list w wierszu poleceń.
| Option | Opis> | 
|---|---|
| --verbose | Ta opcja informuje system kompilacji, aby wyświetlał szczegółowe informacje o konfiguracji sesji debugowania natywnego. Jest to konieczne tylko w przypadku problemów z debugowaniem, gdy debuger nie może połączyć się z aplikacją, a komunikaty o błędach wyświetlane przez  | 
| --force | Domyślnie ndk-gdbprzerywa działanie, jeśli wykryje, że na tym samym urządzeniu jest już uruchomiona inna natywnych sesja debugowania. Ta opcja kończy działanie innej sesji i zastępuje ją nową.
 Pamiętaj, że ta opcja nie zabija rzeczywistej aplikacji, która jest debugowana. Musisz ją zabić osobno. | 
| --start | Gdy uruchamiasz  | 
| --launch=<name> | Ta opcja jest podobna do opcji  | 
| --launch-list | Ta wygodna opcja umożliwia wydrukowanie listy wszystkich nazw aktywnych aktywności znalezionych w pliku manifestu aplikacji.  | 
| --project=<path> | Ta opcja określa katalog projektu aplikacji. Jest to przydatne, jeśli chcesz uruchomić skrypt, nie przechodząc najpierw do katalogu projektu. | 
| --port=<port> | Domyślnie  | 
| --adb=<file> | Ta opcja określa plik wykonywalny adb. Jest to konieczne tylko wtedy, gdy ścieżka nie zawiera pliku wykonywalnego. | 
| -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 połączonych z hostem. Ich znaczenie jest następujące: 
 Możesz też zdefiniować zmienną środowiskową  | 
| --exec=<file>-x <file> | Ta opcja informuje  | 
| --nowait | Wyłącz pauzowanie kodu Java do czasu połączenia z debugerem. Podanie tej opcji może spowodować, że debuger nie zauważy punktów przerwania na początku. | 
| --tui-t | Włącz interfejs tekstowy, jeśli jest dostępny. | 
| --gnumake-flag=<flag> | Ta opcja to dodatkowa flaga (lub flagi), która jest przekazywana do systemu  | 
Uwaga:  3 ostatnie opcje w tej tabeli dotyczą tylko wersji ndk-gdb w Pythonie.
