Platform kodunda hata ayıklama

Platform için Android Studio (ASfP), aşağıdakileri yapmanıza olanak tanıyan güçlü bir hata ayıklayıcı sunar:

  • Hata ayıklama yapılacak cihazı seçin.
  • Java, Kotlin, C/C++ ve Rust kodunuzda kesme noktaları ayarlayın.
  • Değişkenleri inceleyin ve ifadeleri çalışma zamanında değerlendirin.

Hata ayıklayıcıyı kullanmadan önce derlemenizi bir cihaza veya emülatöre yüklemeniz gerekir.

Uygulama süreci (Java/Kotlin) hata ayıklama

Bir Java veya Kotlin uygulama sürecinde hata ayıklamak için:

  1. ASfP'de Java veya Kotlin kodunuzda kesme noktaları ayarlayın.

  2. Menüden Run > Attach Debugger to Android Process'i (Çalıştır > Hata Ayıklayıcıyı Android İşlemine Ekle) seçin.

  3. Choose Process (İşlem Seçin) iletişim kutusunda Debug type'ın (Hata ayıklama türü) Java Only (Yalnızca Java) olarak ayarlandığından emin olun.

  4. Listeden cihazınızı seçin.

  5. Hata ayıklamak istediğiniz uygulama sürecini seçin.

  6. Tamam'ı tıklayın.

  7. Kesme noktalarına ulaşmak için cihazınızdaki uygulamayla etkileşimde bulunun.

Sistem süreci (C/C++) hata ayıklama

C veya C++ ile yazılmış bir sistem sürecinde hata ayıklamak için:

  1. Yalnızca bir cihazın veya emülatörün çalıştığını doğrulayın.

  2. Bir terminal açın ve AOSP ödeme kökünüzden adb root komutunu çalıştırın: bash adb root

  1. ASfP'de C/C++ kodunuzda kesme noktaları ayarlayın.

  2. Menüden Run > Attach Debugger to Android Process'i (Çalıştır > Hata Ayıklayıcıyı Android İşlemine Ekle) seçin.

  3. İşlem Seçin iletişim kutusunda Hata ayıklama türü'nü Yalnızca Yerel veya Çift (Java + Yerel) olarak değiştirin.

  4. Sistem işlemlerini görmek için Tüm işlemleri göster kutusunu işaretleyin.

  5. Listeden cihazınızı seçin.

  6. Hata ayıklamasını yapmak istediğiniz belirli sistem sürecini seçin (örneğin, surfaceflinger veya system_server).

  7. Tamam'ı tıklayın.

  8. Kesme noktalarınıza ulaşmak için cihazla etkileşimde bulunun.

Rust'ta hata ayıklama

ASfP, LLDB ile Hata Ayıklama Adaptörü Protokolü (DAP) kullanılarak Rust hata ayıklamayı destekler. Bu bölümde, CodeLLDB'yi hata ayıklama bağdaştırıcısı sunucusu olarak ayarlama ve ana makinede ve Android cihazda Rust kodunda hata ayıklama açıklanmaktadır.

CodeLLDB'yi hata ayıklama bağdaştırıcı sunucusu olarak ayarlama

  1. Yeni bir Debug Adapter Protocol çalıştırma/hata ayıklama yapılandırması oluşturun:

    1. Menüden Run > Edit Configurations'ı (Çalıştır > Yapılandırmaları Düzenle) seçin.
    2. + düğmesini tıklayın.
    3. Debug Adapter Protocol'ü (Hata Ayıklama Adaptörü Protokolü) seçin.
  2. Sunucu sekmesinde Yeni sunucu oluştur'u tıklayın.

  3. Yeni açılan iletişim kutusunda Şablon seç'i tıklayın ve listeden CodeLLDB'yi seçin.

  4. CodeLLDB şablonunu seçtikten sonra yeni sunucu, önceden tanımlanmış bir yapılandırmayla eklenir.

    1. İzleme açılır menüsünde Ayrıntılı'yı seçerek ayrıntılı izlemeyi etkinleştirin.
    2. Android kaynak önceden oluşturulmuş dosyalarınızdaki lldb-server yolunu belirten bir ortam değişkeni ekleyin:
        LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server
        ```
    
    Replace `REPO_ROOT` with the absolute path to your Android source checkout.
    To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of
    your Android source tree:
    
    ```bash
        ./build/soong/scripts/get_clang_version.py
    
    1. <<insert base directory>> bölümünü değiştirmeyin.

Ana makinede Rust ikili dosyalarında hata ayıklama

  1. Hata Ayıklama Adaptörü Protokolü Çalıştırma/Hata Ayıklama yapılandırmanızda Yapılandırma sekmesini açın.
  2. Hata Ayıklama Modu olarak Başlat'ı seçin.
  3. Çalışma dizinini güncelleyin ve hata ayıklamak istediğiniz ikili program dosyasını seçin.
  4. Yapılandırmayı kaydetmek için Tamam'ı tıklayın.
  5. Yapılandırmanın yanındaki Hata ayıkla simgesini tıklayarak hata ayıklama oturumunu başlatın.

Bu komutu ilk kez çalıştırdığınızda CodeLLDB indirilir. Konsolda DAP izlerini görmeniz gerekir. Rust kodunuzda ayarlanan kesme noktalarına beklendiği gibi ulaşılmalıdır.

Android cihazda Rust ikili dosyalarında hata ayıklama (ekleme modu)

  1. PID'yi bulma: Android cihazda hata ayıklamasını yapmak istediğiniz uygulamanın işlem kimliğini (PID) belirleyin.

  2. Cihazda lldb-server'ı başlatın: Android kaynak ağacınızın kökünden lldbclient.py komut dosyasını çalıştırın ve <PID> yerine işlem kimliğini girin:

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    Bu komut dosyası, cihaza doğru lldb-server'yı gönderir, başlatır, bağlantı noktası yönlendirmeyi (5039 numaralı ana makine bağlantı noktasını cihaza) ayarlar ve sonraki adımlar için gereken DAP JSON yapılandırmasını verir. Bu terminali açık tutun.

  3. Ana makinede CodeLLDB hata ayıklama bağdaştırıcısını başlatın:

    • CodeLLDB uzantı dizinine gidin (varsayılan: ~/.lsp4ij/dap/codelldb/extension/adapter).
    • Gerekli ortam değişkenlerini ayarlayın ve bağdaştırıcı sunucusunu başlatın. Sunucu kurulumunda belirlendiği şekilde REPO_ROOT ve CLANG_VERSION yerine kendi değerlerinizi girin:
        # Sets PYTHONHOME env variable
        export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3
    
        # Tell the dynamic linker where to find python libs
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib
    
        # Starts the CodeLLDB Debugger Adapter server on port 1234
        ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234
    
  4. ASfP DAP istemcisini yapılandırın:

    1. ASfP'de Hata Ayıklama Adaptörü Protokolü Çalıştırma/Hata Ayıklama yapılandırmanıza geri dönün.
    2. Yapılandırma sekmesini seçin.
    3. Hata Ayıklama Modu'nu Ekle olarak ayarlayın.
    4. Adres'i localhost olarak ayarlayın.
    5. Bağlantı noktası'nı 1234 olarak ayarlayın.
    6. lldbclient.py komutundan (2. adım) alınan JSON çıkışını DAP parametreleri (JSON) alanına yapıştırın.
  5. Hata ayıklama oturumunu başlatmak için Hata ayıkla'yı tıklayın.

Sorun giderme

  • error: Connection shut down by remote side while waiting for reply to initial handshake packet hatasını görürseniz mevcut hata ayıklama oturumunu sonlandırın ve cihazdaki lldb-server ile ana makinedeki CodeLLDB bağdaştırıcısını yeniden başlatın.