Hata Ayıklayıcıları Kullanma

Bu sayfada işletim sistemi geliştirme için LLDB kullanımı ayrıntılarıyla anlatılmaktadır. Uygulama geliştirme için, Android Studio GUI'sinin (LLDB'ye dayalı) nasıl kullanılacağını açıklayan uygulamanızda hata ayıklama bölümüne bakın.

GDB artık desteklenmiyor veya sağlanmıyor. 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, GDB'den LLDB'ye komut haritası geçiş sırasında çok faydalıdır.

Önkoşullar

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

  • Derleme ortamını her zamanki envsetup.sh komutuyla ayarlayın.
  • Oluştururken kullandığınız lunch komutunun aynısını ç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 formda bir hata mesajı 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 bkz . Ortamı ayarlama .

İkili dosyada hata ayıklama

Makinenizde oluşturduğunuz 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
lldbclient.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 lldbclient.py bir PID ile kullanın. Örneğin, işlemde PID 1234 ile hata ayıklamak için ana bilgisayarda şunu çalıştırın:

lldbclient.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, sembolleri bulacak şekilde 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şlem başlarken hata ayıklamak için lldbclient.py -r seçeneğiyle birlikte kullanın. Örneğin, ls /bin hata ayıklamak için ana bilgisayarda şunu çalıştırın:

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

Ardından, hata ayıklayıcının isteminde continue komutunu girin.

Uygulama başlangıcında hata ayıklama

Bazen bir uygulamada hata ayıklamayı başlarken yapmak istersiniz (örneğin, bir kilitlenme olduğunda ve kilitlenmeden önce ne olduğunu görmek için kodda adım adım ilerlemek istersiniz). Ekleme bazı durumlarda işe yarar, ancak diğer durumlarda uygulama siz eklemeden önce çö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 lldbserver bu kısıtlamayı devralır.

Uygulama başlangıcında hata ayıklamak için, uygulamaya bir Java hata ayıklayıcısının eklenmesini beklemesi talimatını vermek üzere Ayarlar'daki geliştirici seçeneklerini kullanın:

  1. Ayarlar > Geliştirici seçenekleri > Hata ayıklama uygulamasını seçin'e gidin ve listeden uygulamanızı seçin, ardından Hata ayıklayıcıyı bekle 'yi tıklayın.
  2. Başlatıcıdan veya 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ıyı beklediğini bildiren bir iletişim kutusunun görünmesini bekleyin.
  4. lldbserver / lldbclient normal şekilde ekleyin, kesme noktalarını ayarlayın ve ardından 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 debuggerd çöken işlemleri askıya 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 önceki sürümler
    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 debuggerd , logcat'te hata ayıklayıcının çöken işleme nasıl bağlanacağını gösteren kopyalama ve yapıştırma talimatlarını sağlar.

VS Code 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 arayüzü yerine VS Code hata ayıklayıcı ön ucunu kullanabilirsiniz.

Hata ayıklama için VS Code'u kullanmadan önce CodeLLDB uzantısını yükleyin.

VS Code'u kullanarak kodda hata ayıklamak için:

  1. lldbclient.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 komutu çalıştırmak için Ctrl+Shift+P tuşlarına basın, Debug: Add Configuration... öğesini arayın ve ardından LLDB öğesini seçin. Bu, launch.json dosyasını 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 şu şekilde görünecektir:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py yapılandırmanın nereye yazılacağını tespit etmek için bu yorumları kullanır. Listede başka öğeler varsa, yorum satırlarını diğer yapılandırmalardan sonra sona ekleyin.

  4. envsetup.sh ve lunch çalıştırdığınız terminalde aşağıdaki 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ı, manuel olarak kopyalayıp launch.json yapıştırmanız gereken JSON pasajını yazdıracaktı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'a (F5) 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ı tamamladığınızda, 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şturacak ve eski içerikleri değiştirecektir; bunları manuel olarak kaldırmanıza gerek yoktur.

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 komut dosyası tarafından oluşturulan adımlara yeni bir hata ayıklama başlatma adımı ekler. Kullanılabilir özelliklere ilişkin bir genel bakışı VS Code belgelerinde ve CodeLLDB uzantısının Kullanıcı Kılavuzunda bulabilirsiniz.