Hata Ayıklayıcıları Kullanma

Kullanarak Bu sayfa ayrıntıları LLDB veya GDB OS geliştirme için. Uygulama geliştirmeye için bkz DEBUG uygulamanızı (LLDB göre) Android Studio GUI nasıl kullanılacağı açıklanır yerine,.

GDB kullanımdan kaldırıldı ve yakında kaldırılacak. Eğer LLDB için GDB geçiyorsanız, muhtemelen okuyarak başlamalıdır LLDB Eğitimi . Eğer bir uzman GDB kullanıcısıysanız, GDB LLDB için komut haritası çok yararlı iken geçiş yapan olduğunu.

Önkoşullar

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

  • Her zamanki ile oluşturma ortamını kurma envsetup.sh komutu.
  • Aynı Run lunch oluştururken kullandığınız komutu.

Ortamınızı kurma konusunda daha fazla yardım için bkz çevreye kadar Set .

Çalışan uygulamalarda veya işlemlerde hata ayıklama

Çalışan uygulaması veya yerli cini, kullanım bağlanmak için gdbclient.py bir PID ile. Örneğin, işlemin hatalarını PID 1234 ile ayıklamak için bunu ana bilgisayarda çalıştırın:

gdbclient.py -p 1234

Komut dosyası bağlantı noktası iletmeyi ayarlar, aygıtta uygun uzaktan hata ayıklama saplamasını başlatır, ana bilgisayarda hata ayıklayıcıyı başlatır, onu sembolleri bulmak için yapılandırır ve onu uzak hata ayıklama saplamasına bağlar.

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

O, kullanım başlar başlamaz bir süreç hata ayıklamak için gdbclient.py ile -r seçeneği. Örneğin, ayıklama için ls /bin , ana bilgisayarda bu çalıştırın:

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

Ardından, girmek continue ayıklayıcı en istemi de.

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

Bazen böyle bir çarpışma olduğunda gibi başlar başlamaz bir uygulamayı hata ayıklamak istiyorum ve kazadan önce neler görmek için kod adım istiyorum. Takma bazı durumlarda eserler, ancak eklemek için önce uygulama çöker çünkü diğer durumlarda mümkün değildir. logwrapper (kullanılan yaklaşım strace uygulaması bir port açmak için izinleri ve sahip olmayabilir çünkü) her zaman işi değil gdbserver devralır o kısıtlama.

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

  1. Ayarlar> Geliştirici seçenekleri> Select ayıklama uygulamasına gidip listeden uygulamanızı seçin, ardından ayıklayıcıya bekle tıklayın.
  2. Başlatıcıdan veya çalıştırmak için komut satırını kullanarak ya 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ı beklediğini bildiren bir iletişim kutusunun görünmesini bekleyin.
  4. Takın gdbserver / gdbclient normal kümesi kesme, daha sonra işlemine devam edilir.

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

İsterseniz debuggerd bir hata ayklayc böylece çöktü süreçleri askıya almak, uygun özelliğini ayarlayın:

  • Android 11 sonra
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 ve alt
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • 6.0 Hatmi ve alt Android
    adb shell setprop debug.db.uid 999999
    

Her zamanki çarpışma çıktı sonunda debuggerd kopyasını sağlar ve işlemi çöktü hata ayıklayıcı nasıl bağlanacağını gösteren LogCat talimatları yapıştırın.

Semboller olmadan hata ayıklama

Sembolleri yoksa 32 bit ARM için, gdb o (ARM veya Başparmak) demonte o kanalın hangi komut kümesi belirleyemiyor. Sembol bilgisi eksik olduğunda varsayılan olarak seçilen komut setini belirtmek için aşağıdaki özelliği ayarlayın:

set arm fallback-mode arm  # or thumb

VS Koduyla Hata Ayıklama

LLDB üzerinde platform kod ayıklama destekler Visual Studio Kodu . Cihazlarda çalışan yerel kodu kontrol etmek ve hata ayıklamak için LLDB CLI arabirimi yerine VS Code hata ayıklayıcı ön ucunu kullanabilirsiniz.

Ayıklama için VS Kodunu kullanmadan önce, yüklemek CodeLLDB uzantısı .

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

  1. (Semboller gibi) inşa eserler çalıştırmak için gerekli olduğundan emin olun gdbclient.py veya lldbclient.py bulunmaktadır.
  2. Aşağıdaki komutu çalıştırın:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    Bu bir JSON nesnesi yazdırır ve lldbclient.py çalışmaya devam eder. Bu bekleniyor; öldürmez lldbclient.py programı.

    -r o bayraklar araç tarafından çözümlenir nasıl nedeniyle varsa bayrak geçen bayrak olmalıdır.

  3. VS Kanunu seçeneğini eklenti yapılandırmasında hata ayıklama sekmesinde, ardından LLDB belirleyin: Özel Lansmanı. Bu açılır launch.json dosyası ve listeye yeni bir JSON nesnesi ekler.
  4. Yeni eklenen hata ayıklayıcı yapılandırmasını silin.
  5. Tarafından basılan JSON nesnesi kopyalayın lldbclient.py ve sadece silinen nesne yapıştırın. Değişiklikleri kaydedin.
  6. Ctrl + Shift + U ve tip ayıklayıcı listesini yenilemek için pencereyi yeniden yüklemek için reload window .
  7. Yeni ayıklayıcı yapılandırma ve basın çalıştırmak seçin. Hata ayıklayıcı 10 ila 30 saniye sonra bağlanmalıdır.
  8. Eğer terminal koşu için tamamladığınızda hata ayıklama gittiğinizde lldbclient.py ve basın bitirmek için Enter lldbclient.py programı.