Hata raporlarını okuma

Hatalar her tür geliştirmede bir gerçektir ve hata raporları ve çözmek için kritik önem taşır. Android'in tüm sürümleri desteği Android ile hata raporlarını yakalama Hata Ayıklama Köprüsü (adb) Android 4.2 ve sonraki sürümler Geliştirici Hata raporları alma ve e-posta, Drive vb. aracılığıyla paylaşma seçeneği

Android hata raporlarında dumpsys, dumpstate ve Metin (.txt) biçiminde logcat verileri ile kolayca arama yapabilirsiniz belirli içerikler için Aşağıdaki bölümlerde hata raporu bileşenleri, yaygın sorunları açıkla, faydalı ipuçları ve grep komutları ver . Çoğu bölümde örnekler de vardır. grep komut ve çıkışı ve/veya dumpsys çıkışı için.

Logcat

logcat günlüğü, tüm logcat verilerinin dize tabanlı dökümüdür ekleyebilirsiniz. Sistem bölümü çerçeve için ayrılmıştır ve diğer her şeyi içeren main özelliğinden daha uzun bir geçmişe sahiptir. Her satır genellikle timestamp UID PID TID log-level ile başlar. UID, eski Android sürümlerinde listelenmiyor olabilir.

Olay günlüğünü görüntüleme

Bu günlük, ikili biçimindeki günlük mesajlarının dize gösterimlerini içerir. Google logcat günlüğünden daha az gürültülüdür, ancak aynı zamanda okunması biraz daha zordur. Olay günlüklerini görüntülerken bu bölümde belirli işlem kimliğini arayabilirsiniz (PID) kullanarak bir sürecin ne yaptığını görebilirsiniz. Temel biçim şu şekildedir: timestamp PID TID log-level log-tag tag-values

Günlük düzeyleri aşağıdakileri içerir:

  • V: ayrıntılı
  • D: hata ayıklama
  • I: bilgiler
  • W: uyarı
  • E: hata

 

Diğer yararlı etkinlik günlüğü etiketleri için /services/core/java/com/android/server/EventLogTags.logtags.

ANR'ler ve kilitlenmeler

Hata raporları, hatanın nedenini belirlemenize yardımcı olabilir Uygulama Yanıt Vermiyor (ANR) hataları ve kilitlenme etkinlikleri.

Yanıt vermeyen uygulamaları tanımlama

Uygulamanın belirli bir süre içinde yanıt vermemesi, genellikle neden bir sorun ana iş parçacığı engellenmiş veya meşgulse sistem işlemi sonlandırır ve yığını /data/anr ANR'nin nedenini öğrenmek için am_anr değerini alır.

Ayrıca, logcat günlüğünde ANR in için grep işlemi gerçekleştirebilirsiniz. ANR sırasında CPU'nun ne olduğuyla ilgili daha fazla bilgi içerir.

Yığın izlemeleri bulma

Genellikle ANR'ye karşılık gelen yığın izlemeleri (stack trace) bulabilirsiniz. Şunlardan emin olun: Sanal makine izlerindeki zaman damgası ve PID, araştırdığınız ANR ile eşleşiyorsa sürecin ana ileti dizisini kontrol edin. Unutmayın:

  • Ana ileti dizisi, size yalnızca ileti dizisi sırasında ANR'yi ele alacağız. Bu durum, ANR'nin gerçek nedenine karşılık gelebilir veya etmeyebilir. (Yığının hata raporu masum olabilir; başka bir şey uzun süredir takılmış olabilir gereken bir süre olduğunu unutmayın. Ancak ANR'ye göre yeterince uzun değildir.)
  • Birden fazla yığın izleme kümesi (VM TRACES JUST NOW ve VM TRACES AT LAST ANR) mevcut olabilir. Google Ads hesabınızdaki emin olun.

Kilitlenmeleri bulun

Kilitlenmeler genellikle önce ANR olarak görünür çünkü ileti dizileri takılıp kalır. Eğer sistem sunucusuna ulaşırsa güvenlik zamanlayıcısı en sonunda onu devre dışı bırakır. günlükte şuna benzer bir girişe yol açar: WATCHDOG KILLING SYSTEM PROCESS Kullanıcı açısından bakıldığında yeniden başlatması gibidir. Ancak teknik olarak bu, yeniden başlatma yerine çalışma zamanı gerçek bir yeniden başlatma işlemi olmalıdır.

  • Çalışma zamanı yeniden başlatıldığında sistem sunucusu ölür ve yeniden başlatıldı; Kullanıcı, cihazın başlatma animasyonuna geri döndüğünü görür.
  • Yeniden başlatma sırasında çekirdek çöktü. Kullanıcı reklamı gördüğünde Google başlatma logosuna dönmesini sağlar.

Kilitlenmeleri bulmak için sanal makine izleri bölümlerinde A iş parçacığı kalıbı olup olmadığını kontrol edin B iş parçacığı tarafından tutulan bir şeyi bekliyorum, bu da karşılığında bir şey bekliyor A iş parçacığı tarafından tutuluyor.

Etkinlikler

Bir Etkinlik kullanıcıların işlem gerçekleştirmek için etkileşim kurduğu bir ekran sağlayan numara çevirme, fotoğraf çekme, e-posta gönderme vb. gibi bir şey. rapor perspektifi, etkinlik kullanıcının yapabileceği tek ve odaklanmış bir şeydir ve böylece en çok odaklanmamız çok önemliydi. Etkinlikler (ActivityManager aracılığıyla) Böylece, belirli bir etkinlik için tüm işlemlerin durup başlatılıp başlatılmadığını ve sorun gidermeye de yardımcı olur.

Odaklanılan etkinlikleri göster

Odaklanılan aktivitelerin geçmişini görüntülemek için şunu arayın: am_focused_activity

Görüntüleme işlemi başlangıcı

İşlem başlangıç geçmişini görmek için Start proc araması yapın.

Cihazın sıkıp takılmadığını belirleyin

Cihazın şu özelliklere sahip olup olmadığını belirlemek için: thrashing, am_proc_died ve yakın civarında aktivitelerde anormal bir artış olup olmadığını kontrol edin Kısa süre içinde am_proc_start.

Bellek

Android cihazların fiziksel hafızası genellikle kısıtlı olduğundan, rastgele erişim belleği (RAM) kritik öneme sahiptir. Hata raporlarında çeşitli göstergeler var ve bellek anlık görüntüsü sağlayan bir döküm durumunu gösterir.

Düşük belleği tanımlama

Düşük bellek, bazı işlemleri serbest bırakmak için bazı işlemleri sonlandıracağından sistemin çökmesine neden olabilir belleğe alıp başka işlemler başlatmaya devam ediyor. düşük bellek, am_proc_died ve konsantrasyonları kontrol edin İkili etkinlik günlüğündeki am_proc_start girişleri.

Belleğin az olması görev geçişini yavaşlatabilir ve geri dönüş girişimlerini engelleyebilir (çünkü kullanıcının geri dönmeye çalıştığı görev sonlandırılır). Başlatıcı kullanıcı ana sayfa düğmesine dokunduğunda yeniden başlatılır ve günlükler başlatıcının içeriğini yeniden yükler.

Geçmiş göstergeleri göster

İkili etkinlik günlüğündeki am_low_memory girişi, önbellekteki son işlem sona erdi. Bundan sonra sistem, hizmetleri sonlandırmaya başlar.

Hız göstergelerini görüntüleyin

Sistemin aşırı çalışmasının diğer göstergeleri (sayfalama, doğrudan yeniden hak talebi vb.) şunlardır: kswapd, kworker ve mmcqd tüketiyor daha uzun bir süreçtir. (Toplanan hata raporunun Thrashing'i etkileyebileceğini unutmayın. göstergeleri.)

ANR günlükleri benzer bir bellek anlık görüntüsü sağlayabilir.

Belleğin anlık görüntüsünü alma

Bellek anlık görüntüsü, çalışan Java ve yerel ürünleri listeleyen bir dökümdür (ayrıntılar için Görüntüleme Genel Bellek Ayırmaları). Anlık görüntünün yalnızca durum bilgisini verdiğini unutmayın. belirli bir zamanda; sistem daha iyi (veya daha kötü) olmuş olabilirdi anlık görüntüden önceki şekil.

Yayınlar

Uygulamalar, geçerli zaman dilimi içinde etkinlik göndermek için veya başka bir uygulamaya yönlendirebilirsiniz. Yayın alıcıları belirli hem de mesajları dinlemelerine ve yanıtlamalarına olanak tanır. Hata raporları, gönderilen yayınlar ve gönderilmemiş yayınlar hakkında bilgi içerir. belirli bir yayını dinleyen tüm alıcıların dökümü yer alır.

Geçmiş yayınları görüntüleme

Geçmiş yayınlar, daha önce gönderilmiş olan yayınlardır ve ters kronolojik olarak sıralar.

Özet bölümü, Özet Akışının son 300 arka plan yayını dahildir.

detail bölümü, son 50 ön plan yayını ve son 50 arka plan yayınının yanı sıra alıcılarını otomatik olarak belirler. Aşağıdaki özelliklere sahip alıcılar:

  • BroadcastFilter giriş çalışma zamanında kaydedildi ve gönderildi yalnızca zaten çalışan işlemlere uygulanır.
  • ResolveInfo giriş, manifest girişleri aracılığıyla kaydedilir. İlgili içeriği oluşturmak için kullanılan ActivityManager her bir ResolveInfo için işlemi başlatırsa çalışmıyor.

Etkin yayınları görüntüle

Etkin yayınlar henüz gönderilmemiş olan yayınlardır. sıra, sistemin yayınları yeteri kadar hızlı gönderemeyeceği anlamına gelir.

Yayın dinleyicilerini görüntüleyin

Bir yayını dinleyen alıcıların listesini görüntülemek için Alıcı'yı işaretleyin dumpsys activity broadcasts içindeki Çözümleyici Tablosu. Aşağıdakiler örnek, USER_PRESENT bölümünü dinleyen tüm alıcıları gösterir.

Çakışmayı izleme

İzleme çakışması günlük kaydı bazen gerçek izleme çakışmasını gösterebilir. ancak genellikle sistemin o kadar dolu olduğunu ve her şeyin yavaşladığını belirtir. ART tarafından günlüğe kaydedilen uzun izleme etkinliklerini sistem veya etkinlik günlüğüne görebilirsiniz.

Sistem günlüğünde:

10-01 18:12:44.343 29761 29914 W art     : Long monitor contention event with owner method=void android.database.sqlite.SQLiteClosable.acquireReference() from SQLiteClosable.java:52 waiters=0 for 3.914s

Olay günlüğünde:

10-01 18:12:44.364 29761 29914 I dvm_lock_sample: [com.google.android.youtube,0,pool-3-thread-9,3914,ScheduledTaskMaster.java,138,SQLiteClosable.java,52,100]

Arka plan derlemesi

Derleme işlemi pahalı olabilir ve cihazı yükleyebilir.

Google Play Store güncellemeleri yapıldığında arka planda derlemeler yapılabilir. indiriliyor. Bu durumda, Google Play Store uygulamasından gelen mesajlar (finsky) ve installd, tarihinden önce görünüyor dex2oat ileti.

Derleme, uygulama yüklenirken arka planda da gerçekleşebilir henüz derlenmemiş bir dex dosyası. Bu durumda, finsky veya installd günlük kaydı.

Anlatım

Bir problemin anlatısını oluşturma (nasıl başladığı, ne olduğu, nasıl ortaya çıktığı tepki verdi) için sağlam bir etkinlik zaman çizelgesi gerekir. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için birden fazla günlük ve takvim arasında zaman çizelgelerini senkronize etmek için hata raporunun tam zaman damgasını belirlemeye çalışın.

Zaman çizelgelerini senkronize etme

Bir hata raporu birden fazla paralel zaman çizelgesini yansıtır: sistem günlüğü, olay günlüğü, ve yayınlar için özel zaman çizelgesi, pil istatistikleri, vb. Ne yazık ki, zaman çizelgeleri çoğu zaman farklı zaman tabanları kullanılarak raporlanmaktadır.

Sistem ve olay günlüğü zaman damgaları kullanıcıyla aynı saat diliminde ( zaman damgalarıdır). Örneğin, kullanıcı ana sayfa düğmesine dokunduğunda sistem günlüğü raporları:

10-03 17:19:52.939  1963  2071 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL (has extras)} from uid 1000 on display 0

Aynı işlem için olay günlüğü şunları bildirir:

10-03 17:19:54.279  1963  2071 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]

Çekirdek (dmesg) günlükleri farklı bir zaman tabanı kullanarak günlük öğelerini etiketler saniye cinsinden süre dolmaya başladı. Bu zaman aralığını başka askıya alma ve askıya alma mesajlarını arayın:

<6>[201640.779997] PM: suspend exit 2015-10-03 19:11:06.646094058 UTC
…
<6>[201644.854315] PM: suspend entry 2015-10-03 19:11:10.720416452 UTC

Çekirdek günlükleri askıya alınmış durumdayken süreyi içermeyebilir. Bu nedenle, günlük kaydı, askıya alma girişi ve çıkış mesajları arasındaki parçaları parçalı olarak kaydeder. Ayrıca, çekirdek günlükleri UTC saat dilimini kullanır ve kullanıcıya göre ayarlanmalıdır. saat dilimi.

Hata raporu süresini belirleme

Hata raporunun ne zaman alındığını belirlemek için önce sistem günlüğünü (Logcat) kontrol edin dumpstate: begin için:

10-03 17:19:54.322 19398 19398 I dumpstate: begin

Ardından, Starting service 'bugreport' mesajı için çekirdek günlüğü (dmesg) zaman damgalarını kontrol edin:

<5>[207064.285315] init: Starting service 'bugreport'...

Dikkat edilecek uyarıları göz önünde bulundurarak iki olay arasında ilişki kurmak için geriye doğru çalışın Senkronizasyon zaman çizelgeleri konusunda bahsedilenler. YouTube'da çoğu etkinlik pek yararlı olmaz, bu sayede hata raporunu almak sistemi önemli ölçüde yükler.

Güç

Olay günlüğü, ekranın güç durumunu içerir. 0 ekran kapalı, 1 değeri ekran kapalı ve 2'si tuş koruyucunun işidir.

Hata raporları, uygulama geliştiricilerin, uygulamalarının bu cihaza sahip olması gerektiğini belirtmeleri için kalın. (Uyanık kalma kilitleriyle ilgili ayrıntılar için bkz. PowerManager.WakeLock ve Keep için CPU'nun açık olduğundan emin olun.)

Toplu uyanık kalma kilidi süresi istatistikleri, yalnızca uyanık kalma kilidinin gerçekten cihazı açık tutmaktan veya eklemeyin. Ayrıca, aynı anda birden fazla uyanık kalma kilidi tutulduğunda, uyanık kalma kilidi süresi dağıttığını düşünebilirsiniz.

Güç durumunu görselleştirmeyle ilgili daha fazla yardım için Pil Tarihçisi, bir Android hata raporunu kullanarak pil tüketicilerini analiz eden Google açık kaynak aracı dosyası olarak da kaydedebilir.

Paketler

DUMP OF SERVICE package bölümü, uygulama sürümlerini (ve diğer kullanışlı bilgisi).

İşlemler

Hata raporları, başlangıç ve bitiş tarihleri dahil olmak üzere, durma süresi, çalışma zamanı uzunluğu, ilişkili hizmetler, oom_adj puanı vb. Android'in işlemleri nasıl yönettiğiyle ilgili ayrıntılar için şuraya bakın: Süreçler ve İleti dizileri.

Süreç çalışma zamanını belirleme

procstats bölümü, işlem ve ilişkili hizmetlerin çalıştığından emin olun. Hızlı ve okunabilir bir özet görmek için, AGGREGATED OVER yazarak son üç veya 24 saat içinde olabilir, ardından listeyi görüntülemek için Summary: araması yapabilirsiniz. süreçlerinin çeşitli önceliklerde ne kadar süre boyunca ilerlediği ve Minimum-ortalama-maks. PSS/min-ortalama-maks. USS olarak biçimlendirilmiş RAM kullanımı.

Bir işlemin çalışma nedenleri

dumpsys activity processes bölümünde şu anda tüm oom_adj puanına göre sıralanmış işlemler yürütülüyor (Android, işleme oom_adj değeri atayarak sürecin önemine ActivityManager tarafından dinamik olarak güncellenebilir). Çıkış şuna benzerdir: bir bellek anlık görüntüsü vardır, ancak işlemin çalıştırılmasına neden olan şey hakkında bilgi sağlar. Aşağıdaki örnekte, Kalın karakterlerle gösterilen girişler gms.persistent işleminin çalıştığını belirtir sistem işlemi bağlı olduğu için vis (görünür) öncelikte saat NetworkLocationService.

Taramalar

Aşırı performans gösteren uygulamaları belirlemek için aşağıdaki adımları uygulayın Bluetooth Düşük Enerji (BDE) taramaları:

  • BluetoothLeScanner için günlük mesajlarını bulun:
    $ grep 'BluetoothLeScanner' ~/downloads/bugreport.txt
    07-28 15:55:19.090 24840 24851 D BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
    
  • Günlük mesajlarında PID'yi bulun. Bu örnekte, "24840" ve "24851" PID (işlem kimliği) ve TID (iş parçacığı kimliği) şeklindedir.
  • PID ile ilişkilendirilen uygulamayı bulun:
    PID #24840: ProcessRecord{4fe996a 24840:com.badapp/u0a105}
    

    Bu örnekte, paket adı com.badapp'dir.

  • Sorumlu cihazı belirlemek için Google Play'de paket adını arayın uygulama: https://play.google.com/store/apps/details?id=com.badapp adresine gidin.

Not: Android 7.0 çalıştıran cihazlarda sistem, BDE taramaları için veri toplar ve bu etkinlikleri başvuru süreciyle başlayalım. Ayrıntılar için bkz. Düşük Enerji (LE) ve Bluetooth taramaları üzerinden kullanılabilir.