Hata ayıklayıcıları kullanma

Bu sayfa, LLDB kullanarak ayrıntılı bilgi verir göz önünde bulundurun. Uygulama geliştirme için bkz. Uygulamanızda hata ayıklama Bu makale Android Studio GUI'nin (LLDB'ye göre) nasıl kullanılacağını açıklar.

GDB artık desteklenmemektedir veya sağlanmamaktadır. GDB'den LLDB'ye geçiş yapıyorsanız büyük ihtimalle LLDB Eğiticisi. Uzman bir GDB kullanıcısıysanız GDB'den LLDB'ye komut eşlemesi geçiş sırasında oldukça faydalıdır.

Ön koşullar

Hata ayıklayıcı kullanmak için:

  • Derleme ortamını normal envsetup.sh komutuyla kurun.
  • Derleme sırasında kullandığınız lunch komutunu çalıştırın. Öğle yemeği öğesini hata ayıklamakta olduğunuz cihazla tam olarak eşleşmelidir. Öğle yemeği yemeği bağlı cihazla eşleşmezse formla ilgili 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ı ayarlama konusunda daha fazla yardım için Ortam oluşturun.

İkili programda hata ayıklama

Makinenizde derlediğiniz bir ikili programda hata ayıklamak için öncelikle ikili programı cihaza kopyalamanız gerekir. ve hata ayıklayıcıyı başlatın. Örnek:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

Çalışan uygulamalarda veya işlemlerde hata ayıklayın

Çalışan bir uygulamaya veya yerel arka plan programına bağlanmak için şunu kullanın: PID ile lldbclient.py. Örneğin, PID kullanarak işlemdeki hataları ayıklamak için 1234 olarak ayarlarsanız ana makinede şu komutu çalıştırın:

lldbclient.py -p 1234

Komut dosyası, bağlantı noktası yönlendirmeyi ayarlar ve hata ayıklayıcıyı şu cihazda başlatır: sembolleri bulmak için yapılandırır ve ana makineyi uzaktan hata ayıklama koçanına bağlamanız gerekir.

Yerel işlem başlangıcında hata ayıklama

Başlangıçta işlemde hata ayıklamak için -r ile lldbclient.py kullanın seçeneğini belirleyin. Örneğin, ls /bin hatalarını ayıklamak için ana makinede şu komutu çalıştırın:

lldbclient.py -r /system/bin/ls /bin

Ardından, hata ayıklayıcının istemine continue yazın.

Uygulama başlatmada hata ayıklama

Bazen bir uygulamayı başlatırken (ör. kilitlenme olduğunda) hata ayıklamak isteyebilirsiniz ve kilitlenmeden önce ne olduğunu görmek için kodda adım adım ilerlemek istiyorsunuz. Ekleme bazı durumlarda işe yarar ancak diğer durumlarda çünkü uygulama siz eklemeden önce kilitlenir. İlgili içeriği oluşturmak için kullanılan logwrapper yaklaşım (strace için kullanıldı) her zaman işe yaramaz çünkü uygulamada bir bağlantı noktası açma izinlerini alır ve lldbserver bu izinleri devralır olur.

Uygulama başlangıcında hata ayıklamak için Ayarlar'daki geliştirici seçeneklerini kullanarak Java hata ayıklayıcısının eklenmesini beklemesine neden olur:

  1. Ayarlar > Geliştirici seçenekleri > Hata ayıklama uygulamasını, ardından uygulamanızı listeden seçin, ardından Hata ayıklayıcıyı bekle'yi tıklayın.
  2. Uygulamayı başlatmak için başlatıcıdan veya komut satırını kullanın:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
    .
  3. Uygulamanın yüklenmesini ve uygulamanın yüklendiğini belirten bir iletişim kutusunun görüntülenmesini bekleyin hata ayıklayıcı bekleniyor.
  4. lldbserver/lldbclient normal olarak ekle, ayarla belirleyip işleme devam edin.

Uygulamanın çalışmasına izin vermek için Java Debug Wire Protocol (JDWP) ekleyin Java Debugger (jdb) gibi hata ayıklayıcı:

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

Kilitlenen uygulama veya işlemlerde hata ayıklama

Kilitlenen işlemlerin debuggerd tarafından askıya alınmasını istiyorsanız aşağıdaki işlemleri yapabilirsiniz: hata ayıklayıcı eklemek, uygun özelliği ayarlamak için:

  • Android 11'den sonra
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
    .
  • Android 11 ve önceki sürümler
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
    .
  • Android 6.0 Marshmallow ve önceki sürümler
    adb shell setprop debug.db.uid 999999
    
    .

Her zamanki kilitlenme çıktısının sonunda, debuggerd kopyalama ve yapıştırma işlevini sağlar logcat'te hata ayıklayıcının kilitlenen işleme nasıl bağlanacağını gösteren talimatlar.

VS Code ile hata ayıkla

LLDB, şurada hata ayıklama platform kodunu destekler: Visual Studio Kodu. Kontrol etmek ve kontrol etmek için LLDB CLI arayüzü yerine VS kod hata ayıklayıcı ön ucunu kullanabilirsiniz Cihazlarda çalışan yerel kodda hata ayıklama

Hata ayıklama için VS Kodunu kullanmadan önce CodeLLDB uzantısına ekleyin.

VS kodunu kullanarak kodda hata ayıklamak için:

  1. Çalışması için gereken tüm derleme yapılarının (simgeler gibi) lldbclient.py veya lldbclient.py mevcut.
  2. VS Code'da, bir komut çalıştırmak için Ctrl+Üst Karakter+P tuşlarına basın, Debug: Yapılandırma Ekle... seçeneğini tıklayın, ardından LLDB'yi seçin. Bu işlem 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, bu nedenle aşağıdaki gibi bir yapılandırma olduğuna dikkat edin:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py, yapılandırmanın nereye yazılacağını algılamak için bu yorumları kullanır. Varsa ise açıklama satırlarını diğer yapılandırmalardan sonra sona ekleyin.

  4. envsetup.sh ve belgelerinizin bulunduğu terminalde aşağıdaki komutu çalıştırın: lunch:
    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 adresine yazar ve çalıştırmaya devam eder. Bu beklenen bir durumdur. lldbclient.py programını sonlandırmaz. Şu durumda: --vscode-launch-file kısmını atlayın. Komut dosyası, oluşturacağınız JSON snippet'ini yazdırır. launch.json içine manuel olarak kopyalayıp yapıştırmanız gerekiyor.

    İşaretlerin ayrıştırılma şeklinden dolayı mevcutsa -r işareti son işaret olmalıdır kontrol edebilirsiniz.

  5. Çalıştır ve Hata Ayıklama kenar çubuğunu açın. Yeni yapılandırma, hata ayıklayıcı listesi. Hata Ayıklamayı Başlat (F5) tuşuna basın. Hata ayıklayıcı şundan sonra bağlanmalıdır: 10-30 saniye.

    Çalıştır ve Hata Ayıklama görünümünde yeni yapılandırma görünmüyorsa pencereyi aşağıdaki kodla yeniden yükleyin hata ayıklayıcı listesini yenileyin - Ctrl+Üst Karakter+P tuşlarına basın ve reload window.

  6. Hata ayıklama işlemini tamamladığınızda, lldbclient.py ve Enter tuşuna basarak lldbclient.py programı. Komut dosyasının sonraki çalıştırmaları yapılandırmayı oluşturur #lldbclient-generated yorum arasında manuel olarak değil, eski içeriğin yerine bunları manuel olarak kaldırmanız gerekir.

Oluşturulan başlatma yapılandırmasına özel özellikler eklemek için --vscode-launch-props işareti. Örnek:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
. Örnek özellikler, hata ayıklamadan önce VS Code'un Build adlı bir görevi çalıştırmasını sağlar ve komut dosyası tarafından oluşturulan adımlara yeni bir hata ayıklama başlatma adımı ekler. Daha fazla mevcut mülklere genel bakış VS Code belgelerinde ve CodeLLDB uzantısına sahiptir.