Ta strona zawiera szczegółowe informacje na temat korzystania z LLDB lub GDB do tworzenia systemu operacyjnego. Aby zapoznać się z tworzeniem aplikacji, zobacz Debugowanie aplikacji , w którym wyjaśniono, jak korzystać z interfejsu GUI Android Studio (opartego na LLDB).
GDB jest przestarzałe i wkrótce zostanie usunięte. Jeśli przełączasz się z GDB na LLDB, prawdopodobnie powinieneś zacząć od przeczytania samouczka LLDB . Jeśli jesteś doświadczonym użytkownikiem GDB, mapa poleceń GDB do LLDB jest bardzo pomocna podczas przejścia.
Warunki wstępne
Aby użyć debugera:
- Skonfiguruj środowisko kompilacji za pomocą zwykłego polecenia
envsetup.sh
. - Uruchom to samo polecenie
lunch
, którego użyłeś podczas budowania.
Aby uzyskać więcej pomocy przy konfigurowaniu środowiska, zobacz Konfigurowanie środowiska .
Debugowanie uruchomionych aplikacji lub procesów
Aby połączyć się z uruchomioną aplikacją lub natywnym demonem, użyj gdbclient.py
z identyfikatorem PID. Na przykład, aby debugować proces z PID 1234, uruchom to na hoście:
gdbclient.py -p 1234
Skrypt konfiguruje przekierowanie portów, uruchamia odpowiedni kod zdalny debugowania na urządzeniu, uruchamia debuger na hoście, konfiguruje go do wyszukiwania symboli i łączy go ze zdalnym kodem startowym debugowania.
Debugowanie natywnego uruchamiania procesu
Aby debugować proces podczas jego uruchamiania, użyj gdbclient.py
z opcją -r
. Na przykład, aby debugować ls /bin
, uruchom to na hoście:
gdbclient.py -r /system/bin/ls /bin
Następnie wpisz continue
w monicie debugera.
Debugowanie uruchamiania aplikacji
Czasami chcesz debugować aplikację podczas jej uruchamiania, na przykład w przypadku awarii i chcesz przejść przez kod, aby zobaczyć, co wydarzyło się przed awarią. W niektórych przypadkach dołączanie działa, ale w innych jest niemożliwe, ponieważ aplikacja ulega awarii, zanim będzie można dołączyć. Podejście logwrapper
(używane dla strace
) nie zawsze działa, ponieważ aplikacja może nie mieć uprawnień do otwierania portu, a gdbserver
dziedziczy to ograniczenie.
Aby debugować uruchamianie aplikacji, użyj opcji programisty w Ustawieniach, aby poinstruować aplikację, aby czekała na podłączenie debugera Java:
- Przejdź do Ustawienia > Opcje programisty > Wybierz aplikację do debugowania i wybierz swoją aplikację z listy, a następnie kliknij Poczekaj na debugger .
- Uruchom aplikację z programu uruchamiającego lub za pomocą wiersza poleceń, aby uruchomić:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Poczekaj, aż aplikacja się załaduje i pojawi się okno dialogowe z informacją, że aplikacja czeka na debuger.
- Podłącz
gdbserver
/gdbclient
normalnie, ustaw punkty przerwania, a następnie kontynuuj proces.
Aby aplikacja mogła działać, dołącz debuger Java Debug Wire Protocol (JDWP), taki jak Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Debugowanie aplikacji lub procesów, które ulegają awarii
Jeśli chcesz, aby debuggerd
zawieszał zawieszone procesy, aby można było dołączyć debuger, ustaw odpowiednią właściwość:
- Po Androidzie 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 i niższy
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow i niższy
adb shell setprop debug.db.uid 999999
Na końcu zwykłych danych wyjściowych dotyczących awarii debuggerd
udostępnia instrukcje kopiowania i wklejania w logcat, pokazujące, jak podłączyć debuger do procesu, który uległ awarii.
Debugowanie bez symboli
W przypadku 32-bitowego ARM, jeśli nie masz symboli, gdb
nie może określić, który zestaw instrukcji demontuje (ARM lub Thumb). Aby określić zestaw instrukcji wybrany jako domyślny, gdy brakuje informacji o symbolu, ustaw następującą właściwość:
set arm fallback-mode arm # or thumb
Debugowanie za pomocą VS Code
LLDB obsługuje debugowanie kodu platformy w Visual Studio Code . Możesz użyć frontonu debugera VS Code zamiast interfejsu LLDB CLI do kontrolowania i debugowania kodu natywnego działającego na urządzeniach.
Przed użyciem programu VS Code do debugowania zainstaluj rozszerzenie CodeLLDB .
Aby debugować kod za pomocą VS Code:
- Upewnij się, że są obecne wszystkie artefakty kompilacji (takie jak symbole) wymagane do uruchomienia
gdbclient.py
lublldbclient.py
. - Uruchom następujące polecenie:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Spowoduje to wydrukowanie obiektu JSON, a
lldbclient.py
kontynuuje działanie. Oczekuje się tego; nie zabijaj programulldbclient.py
.Flaga
-r
musi być ostatnią flagą, jeśli jest obecna ze względu na sposób, w jaki flagi są analizowane przez narzędzie. - Na karcie debugowanie w programie VS Code wybierz Dodaj konfigurację , a następnie wybierz LLDB: Uruchamianie niestandardowe . Spowoduje to otwarcie pliku
launch.json
i dodanie do listy nowego obiektu JSON. - Usuń nowo dodaną konfigurację debugera.
- Skopiuj obiekt JSON wydrukowany przez
lldbclient.py
i wklej go do właśnie usuniętego obiektu. Zapisz zmiany. - Aby ponownie załadować okno w celu odświeżenia listy debuggera, naciśnij Ctrl+Shift+P i wpisz
reload window
. - Wybierz nową konfigurację debugera i naciśnij run . Debuger powinien połączyć się po 10 do 30 sekundach.
- Po zakończeniu debugowania przejdź do terminala z uruchomionym
lldbclient.py
i naciśnij klawisz Enter , aby zakończyć programlldbclient.py
.