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-gdb
nie 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:debuggable
na 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-py
implementacji 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-gdb przerywa 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.