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:
- 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.
- 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
- Uygulamanın yüklenmesini ve uygulamanın hata ayıklayıcı beklediğini belirten bir iletişim kutusunun görünmesini bekleyin.
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:
lldbclient.py
veyalldbclient.py
'ün çalıştırılması için gereken tüm derleme yapılarının (simgeler gibi) mevcut olduğundan emin olun.- 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. - 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. envsetup.sh
velunch
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'ilaunch.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.- Ç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. - Hata ayıklama işlemini tamamladığınızda,
lldbclient.py
programını çalıştıran terminale gidin velldbclient.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"}' \
...
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.