Bu sayfa, işletim sistemi geliştirme için LLDB veya GDB kullanımının ayrıntılarını verir. Uygulama geliştirme için bunun yerine, Android Studio GUI'nin (LLDB tabanlı) nasıl kullanılacağını açıklayan Uygulamanızda hata ayıklama bölümüne bakın.
GDB kullanımdan kaldırıldı ve yakında kaldırılacak. GDB'den LLDB'ye geçiş yapıyorsanız, muhtemelen LLDB Eğitimini okuyarak başlamalısınız. Uzman bir GDB kullanıcısıysanız, geçiş sırasında GDB'den LLDB'ye komut haritası çok yardımcı olur.
Önkoşullar
Bir hata ayıklayıcı kullanmak için:
- Yapı ortamını olağan
envsetup.sh
komutuyla kurun. - Oluştururken kullandığınız
lunch
komutunu çalıştırın. Öğle yemeği öğesinin hata ayıkladığınız cihazla tam olarak eşleşmesi gerektiğini unutmayın. Öğle yemeği öğesi bağlı cihazla eşleşmiyorsa, şu şekilde bir hata alırsınız:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Cihazınızı makineye bağlayın.
Ortamınızı kurmayla ilgili daha fazla yardım için bkz . Ortamı kurma .
Bir ikili hata ayıklama
Makinenizde oluşturduğunuz bir ikili dosyanın hatalarını ayıklamak için önce ikili dosyayı cihaza kopyalamanız ve ardından hata ayıklayıcıyı başlatmanız gerekir. Örneğin:
adb push test.exe /data/local/tmp/test.exe
gdbclient.py --port 5038 -r /data/local/tmp/test.exe
Çalışan uygulamalarda veya işlemlerde hata ayıklama
Çalışan bir uygulamaya veya yerel arka plan programına bağlanmak için bir PID ile gdbclient.py
kullanın. Örneğin, işlemi PID 1234 ile hata ayıklamak için ana bilgisayarda şunu çalıştırın:
gdbclient.py -p 1234
Komut dosyası, bağlantı noktası iletmeyi ayarlar, cihazda uygun uzaktan hata ayıklama saplamasını başlatır, ana bilgisayarda hata ayıklayıcıyı başlatır, onu sembolleri bulması için yapılandırır ve onu uzaktan hata ayıklama saplamasına bağlar.
Yerel işlem başlangıcında hata ayıklama
Bir işlemi başlarken hata ayıklamak için gdbclient.py
-r
seçeneğiyle birlikte kullanın. Örneğin, ls /bin
hata ayıklamak için bunu ana bilgisayarda çalıştırın:
gdbclient.py -r /system/bin/ls /bin
Ardından, hata ayıklayıcı isteminde continue
yazın.
Uygulama başlangıcında hata ayıklama
Bazen, örneğin bir kilitlenme olduğunda ve çökmeden önce ne olduğunu görmek için kodda adım adım ilerlemek istediğinizde, bir uygulamada başlarken hata ayıklamak istersiniz. Ekleme bazı durumlarda işe yarar, ancak diğer durumlarda uygulama siz ekleyemeden çöktüğü için imkansızdır. logwrapper
yaklaşımı ( strace
için kullanılır) her zaman işe yaramaz çünkü uygulamanın bir bağlantı noktası açma izni olmayabilir ve gdbserver
bu kısıtlamayı devralır.
Uygulama başlangıcında hata ayıklamak için, uygulamanın bir Java hata ayıklayıcısının eklenmesini beklemesini istemek için Ayarlar'daki geliştirici seçeneklerini kullanın:
- Ayarlar > Geliştirici seçenekleri > Hata ayıklama uygulaması seç'e gidin ve listeden uygulamanızı seçin, ardından Hata ayıklayıcıyı Bekle'ye tıklayın.
- Başlatıcıdan veya çalıştırmak için komut satırını kullanarak uygulamayı başlatın:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Uygulamanın yüklenmesini ve uygulamanın bir hata ayıklayıcı beklediğini söyleyen bir iletişim kutusunun görünmesini bekleyin.
-
gdbserver
/gdbclient
normal şekilde ekleyin, kesme noktalarını ayarlayın ve işleme devam edin.
Uygulamanın çalışmasına izin vermek için Java Hata Ayıklayıcı (jdb) gibi bir Java Hata Ayıklama Tel Protokolü (JDWP) hata ayıklayıcı ekleyin:
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Kilitlenen uygulamalarda veya işlemlerde hata ayıklama
Bir hata ayıklayıcı ekleyebilmeniz için hata ayıklayıcının kilitlenen işlemleri debuggerd
almasını istiyorsanız uygun özelliği ayarlayın:
- Android 11'den sonra
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 ve altı
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow ve daha düşük
adb shell setprop debug.db.uid 999999
Olağan kilitlenme çıktısının sonunda, hata debuggerd
, hata ayıklayıcının kilitlenen işleme nasıl bağlanacağını gösteren logcat'te kopyala ve yapıştır yönergeleri sağlar.
Semboller olmadan hata ayıklama
32-bit ARM için, sembolleriniz yoksa, gdb
hangi komut setini (ARM veya Thumb) sökeceğini belirleyemez. Sembol bilgisi eksik olduğunda varsayılan olarak seçilen komut setini belirtmek için aşağıdaki özelliği ayarlayın:
set arm fallback-mode arm # or thumb
VS Kodu ile Hata Ayıklama
LLDB, Visual Studio Code'da platform kodunda hata ayıklamayı destekler. Cihazlarda çalışan yerel kodu kontrol etmek ve hata ayıklamak için LLDB CLI arabirimi yerine VS Code hata ayıklayıcı ön ucunu kullanabilirsiniz.
Hata ayıklama için VS Code'u kullanmadan önce CodeLLDB uzantısını kurun.
VS Code kullanarak kodda hata ayıklamak için:
-
gdbclient.py
veyalldbclient.py
çalıştırmak için gereken tüm yapı yapılarının (semboller gibi) mevcut olduğundan emin olun. - VS Code'da, bir komut çalıştırmak için Ctrl+Shift+P tuşlarına basın, Debug: Add Configuration... öğesini arayın, ardından LLDB öğesini seçin. Bu, bir
launch.json
dosyası açar ve listeye yeni bir JSON nesnesi ekler. - Yeni eklenen hata ayıklayıcı yapılandırmasını iki yorum satırıyla değiştirin -
// #lldbclient-generated-begin
ve// #lldbclient-generated-end
, böylece yapılandırma listeniz şöyle görünür:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
yapılandırmanın nereye yazılacağını saptamak için bu yorumları kullanır. Listede başka öğeler varsa, açıklama satırlarını diğer yapılandırmalardan sonra sonuna ekleyin. -
envsetup.sh
velunch
çalıştırdığınız terminalde şu komutu çalıştırın:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
oluşturulan yapılandırmayılaunch.json
yazar ve çalışmaya devam eder. Bu bekleniyor;lldbclient.py
programını sonlandırmayın.--vscode-launch-file
atlarsanız komut dosyası,launch.json
manuel olarak kopyalayıp yapıştırmanız gereken JSON snippet'ini yazdırır.-r
bayrağı, bayrakların araç tarafından nasıl ayrıştırıldığına bağlı olarak mevcutsa, son bayrak olmalıdır. - Çalıştır ve Hata Ayıkla kenar çubuğunu açın - yeni yapılandırma hata ayıklayıcı listesinde görünmelidir. Hata Ayıklamayı Başlat (F5) düğmesine basın. Hata ayıklayıcı 10 ila 30 saniye sonra bağlanmalıdır.
Yeni yapılandırma Çalıştır ve Hata Ayıkla görünümünde görünmüyorsa hata ayıklayıcı listesini yenilemek için pencereyi yeniden yükleyin - Ctrl+Shift+P tuşlarına basın ve
reload window
yazın. - Hata ayıklamayı bitirdiğinizde,
lldbclient.py
dosyasını çalıştıran terminale gidin velldbclient.py
programını sonlandırmak için Enter tuşuna basın. Komut dosyasının sonraki çalıştırmaları#lldbclient-generated
yorumlar arasında yapılandırmayı oluşturur ve eski içerikleri değiştirir, bunları manuel olarak kaldırmanız gerekmez.
Oluşturulan başlatma yapılandırmasına özel özellikler eklemek için --vscode-launch-props
bayrağını kullanabilirsiniz. Örneğin:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Örnek özellikler, VS Code'un hata ayıklamadan önce Build
adlı bir görevi çalıştırmasını sağlar ve betik tarafından oluşturulan adımlara yeni bir hata ayıklama başlatma adımı ekler. Kullanılabilir özelliklere genel bir bakışı VS Code belgelerinde ve CodeLLDB uzantısının Kullanıcı Kılavuzunda bulabilirsiniz.