Szczegóły tej strony są podane w LLDB w pracy nad systemami operacyjnymi. Informacje o tworzeniu aplikacji znajdziesz tutaj: Debugowanie aplikacji który wyjaśnia, jak korzystać z GUI w Android Studio (opartej na LLDB).
GDB nie jest już obsługiwany ani udostępniany. Jeśli przechodzisz z GDB na LLDB, prawdopodobnie od zapoznania się Samouczek dotyczący LLDB. Jeśli jesteś doświadczonym użytkownikiem GDB, Mapa poleceń z GDB do LLDB jest bardzo pomocne.
Wymagania wstępne
Aby użyć debugera:
- Skonfiguruj środowisko kompilacji za pomocą zwykłego polecenia
envsetup.sh
. - Uruchom to samo polecenie
lunch
, które było używane podczas tworzenia. Pamiętaj, że pozycja lunchowa powinien być ściśle zgodny z urządzeniem, które debugujesz. Jeśli danie obiadowe nie pasuje do podłączonego urządzenia, pojawi się błąd formularza:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Podłącz urządzenie do komputera.
Więcej informacji o konfigurowaniu środowiska znajdziesz w Skonfiguruj środowisko.
Debugowanie pliku binarnego
Aby debugować plik binarny utworzony na Twoim komputerze, musisz najpierw skopiować go na urządzenie i uruchomić debuger. Na przykład:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Debuguj uruchomione aplikacje lub procesy
Aby połączyć się z uruchomioną aplikacją lub natywnym demonem, użyj
lldbclient.py
z identyfikatorem PID. Aby na przykład debugować proces za pomocą identyfikatora PID,
1234, uruchom to na hoście:
lldbclient.py -p 1234
Skrypt konfiguruje przekierowanie portów, uruchamia odpowiednie zdalny debuger debugowania na urządzeniu, uruchamia debuger na konfiguruje go w taki sposób, aby znajdował symbole i łączy go do atrapu zdalnego debugowania.
Debugowanie uruchomienia procesu natywnego
Aby debugować rozpoczęty proces, użyj metody lldbclient.py
z parametrem -r
. Aby na przykład debugować regułę ls /bin
, uruchom to na hoście:
lldbclient.py -r /system/bin/ls /bin
Następnie w oknie debugera wpisz continue
.
Debugowanie uruchamiania aplikacji
Czasem chcesz debugować aplikację od razu po jej uruchomieniu, np. po awarii
i chcesz sprawdzić kod, by sprawdzić, co się stało przed awarią.
Załączanie czasami działa, ale w innych
nie jest możliwe, bo przed załączeniem aplikacji aplikacja ulega awarii.
Podejście logwrapper
(używane przez strace
)
nie zawsze działa, ponieważ aplikacja może nie mieć
uprawnienia do otwarcia portu, a lldbserver
dziedziczy to
.
Aby debugować uruchamianie aplikacji, skorzystaj z opcji programisty w Ustawieniach aplikacja, która będzie czekać na dołączenie debugera Java:
- Wybierz kolejno Ustawienia > Opcje programisty > Wybierz aplikację do debugowania, a potem kliknij aplikację na liście i kliknij Poczekaj na debugera.
- Uruchom aplikację, korzystając z menu z aplikacjami lub z wiersza poleceń:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Poczekaj, aż aplikacja się załaduje, i pojawi się okno z informacją, że i czekam na debugera.
- Dołącz
lldbserver
/lldbclient
normalnie, ustaw punktów przerwania, a następnie kontynuuj proces.
Aby umożliwić uruchomienie aplikacji, dołącz protokół JDWP (Java Debug Wire Protocol) np. Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Debuguj aplikacje lub procesy, które uległy awarii
Jeśli chcesz, aby usługa debuggerd
zawieszała awarie procesów, aby umożliwić Ci
dodaj debuger, ustaw odpowiednią właściwość:
- Po Androidzie 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 i starsze
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow lub starszy
adb shell setprop debug.db.uid 999999
Na końcu typowych danych wyjściowych w przypadku awarii debuggerd
udostępnia kopiowanie i wklejanie
instrukcje w logcat pokazujące, jak połączyć debuger z procesem, który uległ awarii.
Debuguj za pomocą kodu VS
LLDB obsługuje debugowanie kodu platformy Kod Visual Studio. Zamiast interfejsu wiersza poleceń LLDB możesz używać frontendu debugera kodu VS do na debugowanie kodu natywnego uruchomionego na urządzeniach.
Przed debugowaniem za pomocą VS Code zainstaluj CodeLLDB.
Aby debugować kod za pomocą VS Code:
- Sprawdź, czy wszystkie artefakty kompilacji (takie jak symbole) są wymagane do uruchomienia
lldbclient.py
lublldbclient.py
są obecne. - W VS Code naciśnij Ctrl + Shift + P, aby uruchomić polecenie i wyszukaj Debugowanie:
Dodaj konfigurację..., a następnie wybierz LLDB.
Spowoduje to otwarcie pliku
launch.json
i dodanie nowego obiektu JSON do listy. - Zastąp nowo dodaną konfigurację debugera dwoma wierszami komentarza:
// #lldbclient-generated-begin
i// #lldbclient-generated-end
, więc że Twoja lista konfiguracji wygląda tak:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
używa tych komentarzy, aby wykryć, gdzie zapisać konfigurację. Jeśli a także inne elementy na liście, dodaj wiersze komentarza na końcu listy po pozostałych konfiguracjach. - Uruchom to polecenie w terminalu, w którym zostały uruchomione polecenia
envsetup.sh
ilunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
zapisuje wygenerowaną konfigurację wlaunch.json
i będzie nadal działać. To normalne. nie spowoduje wyłączenia programulldbclient.py
. Jeśli pomiń--vscode-launch-file
, skrypt wyświetli fragment kodu JSON, który musisz musisz skopiować i wkleić ręcznie dolaunch.json
.Flaga
-r
musi być ostatnią flagą, jeśli występuje, ze względu na sposób analizowania flag przez narzędzie. - Otwórz pasek boczny Uruchom i debuguj. Nowa konfiguracja powinna się pojawić w
listę debugerów. Naciśnij Start Debugging (F5) (Rozpocznij debugowanie). Debuger powinien połączyć się po
Od 10 do 30 sekund.
Jeśli nowa konfiguracja nie pojawiła się w widoku Uruchamianie i debugowanie, załaduj ponownie okno, aby odśwież listę debugerów – naciśnij Ctrl+Shift+P i wpisz
reload window
- Po zakończeniu debugowania przejdź do uruchomionego terminala
lldbclient.py
i naciśnij Enter, aby zakończyć Programlldbclient.py
. Kolejne uruchomienia skryptu wygenerowałyby konfigurację między komentarzami#lldbclient-generated
i zastąpią starą treść, nie musisz usunąć je ręcznie.
Aby dodać właściwości niestandardowe do wygenerowanej konfiguracji uruchamiania, możesz użyć metody
flaga --vscode-launch-props
. Na przykład:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Przykładowe właściwości skłoniłyby VS Code do uruchomienia zadania o nazwie Build
przed debugowaniem i
dołącza nowy krok inicjowania debugowania do kroków wygenerowanych przez skrypt. Więcej informacji na ten temat znajdziesz
dostępnych miejsc zakwaterowania w
VS Code oraz w instrukcji obsługi
Rozszerzenie CodeLLDB.