Android Studio'da Hata Ayıklama Yöntemleri

Logları Filtreleme



Android Studio'da bir log yazdırmak istediğinizde log mesajınız ile birlikte tarih, thread id, paket adı gibi odaklandığınız log mesajı haricinde umursamayacağınız bilgilerle ekrana yazdırılır. Bu bilgilerden kurtulmak isterseniz Logcat ekranında aşağıdaki adımları izleyerek; tarih, thread id ya da paket adından kurtularak log mesajınızı yazdırabilirsiniz.


Sadece tag özelinde filtreledikten sonra High Score özelinde incelemek istediğimizde hala karmaşık bir görüntü mevcut.


Burada High Score özelinde filtrelemek için aşağıdaki alandan filtreleyebiliriz.


Bu düzenli olarak kullandığınız bir filtre ise Edit Filter Configuration'ı seçip özel bir filtre ekleyebilirsiniz.


Ardından filtrenizin ayrıntılarını ekleyin.


Bu karmaşayı azaltmanın bir başka yolu, benzer satırları gruplandırmak veya daraltmak için Fold Lines Like This özelliğini kullanmaktır.


Böylece benzer içerikler aşağıdaki gibi daraltılacaktır. Eğer tekrar daraltılmış bu bilgilere ulaşmak isterseniz üzerine tıklamanız yeterli olacaktır.


Çalışan Uygulamanıza Hata Ayıklayıcıyı Eklemek


Uygulamada hata ayıklama özelliğini kullanırken genelde debug özelliğini kullanırız. Bu uygulamanızı uçtan uca debug edilecek şekilde baştan başlatır. Ancak bir uygulamayı zaten çalıştırarak başlattıysanız, çalışan uygulamayı debug etmek istediğinizde Attach Debugger to Android özelliğini kullanabiliriz.


Bu şekilde uygulamanız hali hazır durumuna devam ederken debug yapabilmeniz mümkün olacaktır.


Koşullu Breakpointler


Uygulamanızdaki belirli bir etkinlik türüyle ilgili bir hatayı takip etmeniz gerekebilir. Örneğin geliştirdiğiniz bir oyunda, bir oyuncu son sağlık birimini kullanan nesneye çarptığında durmak isteyebilirsiniz. Çarpışmalar için bir breakpoint belirlediniz fakat bu her çarpışmada duruyor. Bundan kaçınmak için koşullu breakpoint'leri kullanabilirsiniz.

Koşullu bir breakpoint kullanabilmek için var olan breakpoint'inize sağ tıklayın ve bir koşul ekleyin. Koşul, bir Boolean değerine eşit olan herhangi bir kod ifadesi olabilir. Kod satırına geldiğinde, ifade true olarak değerlendirilirse breakpoint'in akışı keser ve kodu inceleyebilirsiniz.


Burada, mantıksal olarak, oyuncu bir nesneyle çarpışmak üzereyken, player.health == 1 koşulunun ayarlanması, oyuncunun sağlığı 0'a düşmeden önce nesneyle en son çarpışmasını yakalamanızı sağlar.


Bağımlı Breakpoint'ler


Yalnızca belirli bir yol boyunca gerçekleşen bir hata varsa, kodda bir breakpoint ayarlamak çok sayıda gereksiz durumda akışın kesilmesine yol açabilir. Bu sorunu aşmak için, yalnızca belirtilen başka bir breakpoint'e geldikten sonra tetiklenen bağımlı breakpoint noktalarını kullanabilirsiniz.


Bağımlı bir breakpoint oluşturmak için ikinci breakpoint noktasına sağ tıklayıp More menu açın. Disable until breakpoint is hit alanında bağımlı olmak istediğiniz breakpoint noktasını seçin.



Burada breakpoint'in simgesinin değiştiğini göreceksiniz.


Thread'i Askıya Alma


Çok iş parçacıklı bir uygulamada hata ayıklarsanız, breakpoint noktalarının varsayılan tüm iş parçacıklarını askıya aldığını göreceksiniz. Ancak bu davranışı istemeyebilirsiniz. Örneğin, bir iş parçacığını engelleyebileceğinizi ve uygulamanızın geri kalanının hala çalıştığını doğrulamak isterseniz veya arka plan görevini incelerken kullanıcı arayüzünüzün oluşturulmaya devam etmesini istersiniz.


Bu durumda yalnızca geçerli thread'i askıya almak için breakpoint üzerine sağ tıklayarak seçenekleri açın ve Suspend ayarlarında thread'i seçin.



Evaluate ve Log


Bazen, bir kesme noktasında durmak yerine, uygulama durumuyla ilişkili bazı bilgileri görmek istersiniz. Bunu yapmak için printlns ekleyebilirsiniz. Yeniden derleme gerektiren bu yaklaşımı kullanmak yerine, breakpoint noktasını değerlendirmek ve log mesajı olarak yazdırmak için kullanabilirsiniz.


Bunu yapmak için breakpoint seçeneklerinde Suspend'i devre dışı bırakın ve Evaluate and log özelliğini etkinleştirin.


Artık herhangi bir kod ifadesi ekleyebilirsiniz; bu ifade değerlendirilir ve log mesajı olarak yazdırılır.


Breakpoint Grupları


Bir hata üzerinde çalışıyorsunuz, fakat bir süre sonra yeterince ilerleyemediğinizi fark ettiniz. Bu durumda başka bir hata üzerinde çalışmaya geçtiğinizde önceki çalıştığınız breakpoint'ler üzerinde hala akış kesilmeye devam eder. İlgisiz breakpoint'ler işinizi zorlaştıracaktır. Bu durumda breakpoint grupları hayatınızı kolaylaştıracaktır.


İlk ilgisiz breakpoint akışınızı durdurduğunda sağ tıklayın ve More kısmını açın. Böylece diğer tüm kesme noktalarının bir listesini göreceksiniz. Diğer hata ile ilgili tüm breakpoint'leri seçin. Seçilen breakpoint'lere sağ tıklayın ve Move to group seçin daha sonra Create new diyerek breakpoint grubunuza bir isim verin. Artık grupladığınız tüm kesme noktalarınızı tek bir tık ile istediğinizde açıp kapatabilirsiniz.


Objeleri İşaretleme


Objeler genelde @10140 gibi hashcode'ları ile görünürler. Eğer akış içerisinde takip etmek istediğiniz bir obje varsa bunu hashcode üzerinden bir kağıda yazarak takip edebilirsiniz. Fakat bu işinizi oldukça zorlaştıracaktır. Android Studio bu durum için Mark Object çözümünü sunuyor.


Takip etmek istediğiniz nesnenin üzerine gelip sağ tıkladığınızda Mark Object'i tıklatıp bir etiket ismi verebilirsiniz. Böylece hata ayıklama penceresinin herhangi bir yerinde bu hashcode a sahip objeyi kolayca tanıyabilirisiniz. Bununla birlikte hangi bağlamda olursanız olun bir breakpoint'e çarptığınız sürecek Watches penceresinden etiketlediğiniz objelerin durumlarını izleyebilirsiniz.


Evaluate Expression


Variables ve Watches sekmeleri açık değerler üzerinden kodunuzu incemele fırsatı verir fakat bazen daha özgür bir şekilde kodunuzu keşfetmek istersiniz. Burada Evaluate expression yaparak kodunuzu daha detaylı bir şekilde inceleyebilirsiniz.


Evaluate expression iconuna tıkladıktan sonra herhangi bir kod ifadesini girin ve Evaluate butonuna basın. Ayrıca bir objeyi değerlendirirseniz Result kısmında objeye göz atabilirsiniz.


Birden çok satır ifade girmek isterseniz aşağıdaki icona basarak genişletebilirsiniz.


Böylece aşağıdaki gibi karmaşık çok satırlı ifadeler ile kodunuzu inceleyebilirsiniz.


Stacktrace Analizi


Tüm bu ipuçlarına rağmen maalesef kodunuzda muhtemel hatalar olacak ve hata raporları alacaksınız. Bu hata raporlarını aldığınızda, raportör istisnanın bir metin kopyasını eklemiş olabilir.


Analyze menüsünden Analyze Stack Trace or Thread Dump kullanarak bunları Android Studio'da anlamlı hala dönüştürebilirsiniz.



Bu araç panonuzdaki bilgilerle otomatik olarak doldurulur. Ok butonuna bastığınızda aşağıdaki gibi anlamlı bir sürümü konsolunuza eklenir.



Burada muhtemelen dikkat etmenizi gerektirmeyen kodlar gri ile işaretli ve önemi vurgulanmak istenen kodlar ise mavi ile işaretli olarak gelir.


Son Olarak


Bunlar hata ayıklamak için kullanacağınız ipuçlarının yalnızca bir kısmıdır. Bunlarla iligili diğer bir kaç özellik aşağıda yer almaktadır.

  • Ctrl + Sürükle breakpoint'in bir kopyasını oluşturur.

  • Bir kodun bittiği süslü paranteze breakpoint koyabilirsiniz.

  • field'lar ve property'ler için breakpoint atayabilirsiniz. (field watchpoints)

  • Bir interface için tüm implementasyonlarını izlemek için interface metoduna breakpoint atayabilirsiniz.


Daha fazla bilgi ve görsel refaranslar için orjinal kaynağa göz atabilirsiniz; https://medium.com/androiddevelopers/debugging-in-android-studio-dfbbf8a8d03c


#android #androiddebugging #androidstudio #debugtool

0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın