Ta strona szczegóły wykorzystujące LLDB lub GDB do rozwoju os. Dla rozwoju aplikacji, zobacz debugować aplikację zamiast, który wyjaśnia, jak korzystać z systemu Android Studio GUI (w oparciu o LLDB).
GDB jest przestarzałe i wkrótce zostanie usunięte. Jeśli przełączenie z GDB do LLDB, powinieneś zacząć od czytania LLDB Tutorial . Jeśli jesteś użytkownikiem ekspert GDB The GDB do LLDB Polecenie map jest bardzo pomocne czasie zmiany.
Warunki wstępne
Aby użyć debugera:
- Skonfigurować środowisko budować z zwykłym
envsetup.sh
polecenia. - Uruchom ten sam
lunch
polecenie użyte podczas budowy.
Aby uzyskać więcej pomocy konfigurowania środowiska, zobacz Set up środowisku .
Debugowanie uruchomionych aplikacji lub procesów
Aby połączyć się z systemem aplikacji lub rodzimej demona, korzystanie gdbclient.py
z 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
Debugować proces jak zaczyna, używać gdbclient.py
z -r
opcja. Na przykład, aby debugować ls /bin
, uruchomić to na hoście:
gdbclient.py -r /system/bin/ls /bin
Następnie podaj continue
w debugger na szybka.
Debugowanie uruchamiania aplikacji
Czasami chcesz debugować aplikację, jak zaczyna, tak jak wtedy, gdy nie ma awarii i chcesz przejść przez kod, aby zobaczyć, co się stało przed katastrofą. Mocowanie prace w niektórych przypadkach, ale w innych przypadkach jest to niemożliwe, ponieważ aplikacja ulega awarii, zanim będzie można dołączyć. logwrapper
podejście (używany do strace
) nie zawsze działa, ponieważ aplikacja może nie mieć uprawnień do otwarcia portu, a gdbserver
dziedziczy tego ograniczenia.
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 debugowania aplikacji i wybrać aplikację z listy, a następnie kliknij Poczekaj na debugger.
- Uruchom aplikację, albo z wyrzutni lub za pomocą wiersza polecenia do uruchomienia:
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.
- Załączyć
gdbserver
/gdbclient
normalnie ustawić punkty przerwania, a następnie kontynuować proces.
Aby umożliwić działanie aplikacji, 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 debuggerd
zawieszenia rozbił procesów, dzięki czemu można dołączyć debugera, ustawić odpowiednią właściwość:
- Po Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 i dolną
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow i niższy
adb shell setprop debug.db.uid 999999
Pod koniec zwykłego wyjścia katastrofy, debuggerd
zapewnia kopiowanie i wklejanie instrukcji w LogCat pokazujący jak połączyć debugera do procesu rozbił.
Debugowanie bez symboli
Dla 32-bitowej architektury ARM, jeśli nie ma symboli, gdb
nie może określić, który zestaw instrukcji to demontażu (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 debugowania kodu platformy na programie 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 kodu VS do debugowania, zainstaluj rozszerzenie CodeLLDB .
Aby debugować kod za pomocą VS Code:
- Upewnić się, że wszystkie artefakty budowlanej (takie jak symbole) wymagane do uruchomienia
gdbclient.py
lublldbclient.py
są obecne. - Uruchom następujące polecenie:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Drukuje obiekt JSON i
lldbclient.py
nadal pracuje. Oczekuje się tego; nie zabićlldbclient.py
program.-r
flaga musi być ostatnią flagę, jeśli jest obecny ze względu na to, jak flagi są analizowane przez narzędzia. - W zakładce diagnostycznych w kodzie VS, wybierz Konfiguracja Add, a następnie wybierz LLDB: niestandardowy Uruchom. To otwiera
launch.json
plik i dodaje nowy obiekt JSON do listy. - Usuń nowo dodaną konfigurację debugera.
- Skopiować obiekt JSON wydrukowane przez
lldbclient.py
i wklej go do obiektu po prostu usunięte. Zapisz zmiany. - Aby odświeżyć okno, aby odświeżyć listę debugger, naciśnij Ctrl + Shift + P i typ
reload window
. - Wybierz nowy przebieg konfiguracji debuggera i prasową. Debuger powinien połączyć się po 10 do 30 sekundach.
- Kiedy skończysz debugowanie, przejdź do terminala uruchomionego
lldbclient.py
i naciśnij klawisz Enter, aby zakończyćlldbclient.py
program.