Hata Ayıklayıcıları Kullanma

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:

  1. 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.
  2. 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
    
  3. Uygulamanın yüklenmesini ve uygulamanın bir hata ayıklayıcı beklediğini söyleyen bir iletişim kutusunun görünmesini bekleyin.
  4. 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:

  1. gdbclient.py veya lldbclient.py çalıştırmak için gereken tüm yapı yapılarının (semboller gibi) mevcut olduğundan emin olun.
  2. 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.
  3. 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.

  4. envsetup.sh ve lunch ç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.

  5. Ç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.

  6. Hata ayıklamayı bitirdiğinizde, lldbclient.py dosyasını çalıştıran terminale gidin ve lldbclient.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.