Korzystanie z debugerów

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:

  1. Przejdź do Ustawienia> Opcje programisty> Wybierz debugowania aplikacji i wybrać aplikację z listy, a następnie kliknij Poczekaj na debugger.
  2. 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
    
  3. Poczekaj, aż aplikacja się załaduje i pojawi się okno dialogowe z informacją, że aplikacja czeka na debuger.
  4. 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:

  1. Upewnić się, że wszystkie artefakty budowlanej (takie jak symbole) wymagane do uruchomienia gdbclient.py lub lldbclient.py są obecne.
  2. 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.

  3. 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.
  4. Usuń nowo dodaną konfigurację debugera.
  5. Skopiować obiekt JSON wydrukowane przez lldbclient.py i wklej go do obiektu po prostu usunięte. Zapisz zmiany.
  6. Aby odświeżyć okno, aby odświeżyć listę debugger, naciśnij Ctrl + Shift + P i typ reload window .
  7. Wybierz nowy przebieg konfiguracji debuggera i prasową. Debuger powinien połączyć się po 10 do 30 sekundach.
  8. Kiedy skończysz debugowanie, przejdź do terminala uruchomionego lldbclient.py i naciśnij klawisz Enter, aby zakończyć lldbclient.py program.