Hata ayıklayıcıları kullanma

Bu sayfada, OS geliştirme için LLDB kullanımıyla ilgili ayrıntılı bilgiler verilmektedir. Uygulama geliştirme için Android Studio GUI'nin (LLDB tabanlı) nasıl kullanılacağı açıklanan Uygulamanızda hata ayıklama başlıklı makaleyi inceleyin.

GDB artık desteklenmiyor veya sağlanmıyor. GDB'den LLDB'ye geçiyorsanız muhtemelen LLDB Eğitimi'ni okumanız gerekir. GDB uzmanıysanız geçiş sırasında GDB'den LLDB'ye komut haritası çok faydalı olacaktır.

Ön koşullar

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

  • Derleme ortamını normal envsetup.sh komutuyla ayarlayın.
  • Derleme sırasında 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 aşağıdaki ş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ı ayarlama konusunda daha fazla yardım için Ortam oluşturma başlıklı makaleyi inceleyin.

İkili dosyalarda hata ayıklama

Makinenizde derlediğiniz bir ikili dosyada hata ayıklama yapmak için önce ikili dosyayı cihaza kopyalamanız, ardından hata ayıklayıcıyı başlatmanız gerekir. Ö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ıklama

Çalışan bir uygulamaya veya yerel daemon'a bağlanmak için PID ile lldbclient.py kullanın. Örneğin, PID'si 1234 olan işlemde hata ayıklama yapmak için ana makinede şu komutu çalıştırın:

lldbclient.py -p 1234

Komut dosyası, bağlantı noktası yönlendirmeyi ayarlar, cihazda uygun uzaktan hata ayıklama stub'ini başlatır, ana makinede hata ayıklayıcıyı başlatır, simgeleri bulacak şekilde yapılandırır ve uzaktan hata ayıklama stub'ine bağlar.

Yerel işlemin başlatılmasını hata ayıklama

Bir işlemin başlatılırken hata ayıklama işlemini yapmak için lldbclient.py seçeneğini -r ile birlikte kullanın. Örneğin, ls /bin için hata ayıklama yapmak istiyorsanız düzenleyicide şunu çalıştırın:

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

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

Uygulama başlatma işleminde hata ayıklama

Bazen, kilitlenme olduğunda olduğu gibi bir uygulamayı başlarken hata ayıklamak ve kilitlenmeden önce ne olduğunu görmek için kodda adım adım ilerlemek istersiniz. Ekleme işlemi bazı durumlarda işe yarar ancak uygulama, ekleme yapmadan önce kilitlendiği için bazı durumlarda mümkün olmaz. Uygulamanın bağlantı noktası açma izni olmayabileceği ve lldbserver'nin bu kısıtlamayı devraldığı için logwrapper yaklaşımı (strace için kullanılır) her zaman işe yaramaz.

Uygulamanın başlatılmasıyla ilgili hataları ayıklamak için Ayarlar'daki geliştirici seçeneklerini kullanarak uygulamaya bir Java hata ayıklayıcının eklenmesini beklemesini söyleyin:

  1. Ayarlar > Geliştirici seçenekleri > Hata ayıklama uygulamasını seç'e gidin ve listeden uygulamanızı seçin, ardından Hata ayıklayıcıyı bekle'yi tıklayın.
  2. Uygulamayı başlatmak için Başlatıcı'yı kullanın veya komut satırını çalıştırın:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Uygulamanın yüklenmesini ve uygulamanın hata ayıklayıcı beklediğini belirten bir iletişim kutusunun görünmesini bekleyin.
  4. lldbserver/lldbclient'yi normal şekilde ekleyin, kesme noktaları belirleyin ve ardından işleme devam edin.

Uygulamanın çalışmasına izin vermek için Java Hata Ayıklama Kablosu Protokolü (JDWP) hata ayıklayıcısı (ör. Java Hata Ayıklama Aracı (jdb)) 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'ün kilitlenen 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 önceki sürümler
    adb shell setprop debug.db.uid 999999
    

debuggerd, normal kilitlenme çıkışının sonunda, hata ayıklayıcının kilitlenen işleme nasıl bağlanacağını gösteren kopyala ve yapıştır talimatlarını logcat'te 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ıklama yapmak için:

  1. lldbclient.py veya lldbclient.py'ün çalıştırılması için gereken tüm derleme yapılarının (simgeler gibi) mevcut olduğundan emin olun.
  2. VS Code'da bir komut çalıştırmak için Ctrl+Üst Karakter+P tuşlarına basın, Hata Ayıklama: Yapılandırmayı Ekle...'yi arayın ve 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ı (// #lldbclient-generated-begin ve // #lldbclient-generated-end) ile değiştirin. Böylece yapılandırma listeniz şu şekilde görünür:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

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

  4. envsetup.sh ve lunch komutlarını ç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'a yazar ve çalışmaya devam eder. Bu beklenen bir durumdur. lldbclient.py programını sonlandırmayın. --vscode-launch-file değerini atlarsanız komut dosyası, JSON snippet'ini yazdırır. Bu snippet'i launch.json alanına manuel olarak kopyalayıp yapıştırmanız gerekir.

    İşaretler araç tarafından ayrıştırıldığı için -r işareti varsa son işaret olmalıdır.

  5. Çalıştır ve Hata Ayıkla yan çubuğunu açın. Yeni yapılandırma, hata ayıklayıcı listesinde görünür. Hata Ayıklamayı Başlat (F5)'a basın. Hata ayıklayıcı 10 ila 30 saniye sonra bağlanır.

    Yeni yapılandırma, Çalıştır ve Hata Ayıklama görünümünde görünmediyse hata ayıklayıcı listesini yenilemek için pencereyi yeniden yükleyin: Ctrl+Üst Karakter+P tuşlarına basın ve reload window yazın.

  6. Hata ayıklama işlemini tamamladığınızda, lldbclient.py programını çalıştıran terminale gidin ve lldbclient.py programı 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. Bu içerikleri manuel olarak kaldırmanız gerekmez.

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

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. Mevcut özelliklere dair genel bilgileri VS Code dokümanlarında ve CodeLLDB uzantısının Kullanıcı Kılavuzu'nda bulabilirsiniz.