Eclipse Debug Kullanımı

Programımızın beklenmedik bir şekilde çalışmasına sebep olan her şeye “bug” denir.Bug’ların temizlenmesi giderilmesi işlemine ise “debugging (hata ayıklama)” denir. Hata ayıklama işlemi bize compiler(derleyici)’in çalışma tarzını, mantığını en iyi anlatan yollardan biridir. Bu mantığı anlamak büyük projelerde bize çok yardımcı olacaktır.
Print Debugging (Yazdırarak hata ayıklama);
Kodumuzun içerisine yerleştirdiğimiz print(yazdırma) metotları ile yapılan hata ayıklama çeşididir. Hata ayıklamak için en uygun yöntem olmamasına rağmen diğer hata ayıklama çeşitlerine göre daha kullanışlı ve kolay görülür. Bir çoğumuz farkında olmadan bu hata ayıklama çeşidini zaten kullanmaktayız.Bu yazımızda LogCat ile hata ayıklamaya değineceğiz.Kısaca kullanım yerlerine örnek verecek olursak;
Bir metoda giriş çıkışları kontrol edebilir,kodumuzun içerisindeki herhangi bir noktanın çalışıp çalışmadığı kontrolü yapılabilir,değişkenlerin o anki değerlerine bakılabilir…
LogCat, android günlüğü olarak tanımlanabilir. Yapılan işlemlerin adımlarını genel olarak görmek için kullanılır. Bu görünüme programcı da kendi isteği doğrultusunda notlar düşebilmektedir. Buraya
Window → Show View → Other… → Android → LogCat. uzantısı ile ulaşılır.
Log.i( tag , mesaj); şeklinde yazdırılır.LogCat görünümünde “yeşil +” olarak görülen buton ile loglarımızı “Taglara” göre sınıflandırabilir ve istemediğimiz taglardan kalabalıklardan kurtulabiliriz. android.util.Log classını import ettikten sonra Log statement’lar yazılır. LogCat’e 5 farklı renkte log statement girilebilir. Bunlar şu şekildedir :
1
2
3
4
5
6
7
8
9
10
11
|
Log.e(“Logcat Deneme”,“Hata (Kırmızı)”);
Log.w(“Logcat Deneme” , “Uyarı (Turuncu)”);
Log.i(“Logcat Deneme”, “Bilgi (Yeşil)”);
Log.d(“Logcat Deneme”, “Hata Ayıklama (Mavi)”);
Log.v(“Logcat Deneme”, “Ayrıntı (Siyah)”);
Log.wtf(“Logcat Deneme”, “What a Terrible Fail (Kırmızı)”);
|
Logcat’in diğer özelliği uygulamanın kapanma sebebini göstermesidir. Örneğin projemizi oluştururken xml dosyasındaki textview’i java classında Edittext olarak tanımlandı. Herhangi bir intellisense hatası alınmamasına karşın program çalışmaz.Bu hatayı LogCat e bakarak görülebilir.
Logcat Hatası :
Bir örnek logcat görüntüsü ve örnek kodlara bakalım :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
package TeknolojiTC.debugging;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class Debugging extends Activity {
int sayi = 0;
RelativeLayout arkaPlan;
Button arttir;
TextView deger;
Button deistir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_debugging);
arkaPlan = (RelativeLayout) findViewById(R.id.arkaplan);
arttir = (Button) findViewById(R.id.arttir);
deger= (TextView) findViewById(R.id.deger);
deistir = (Button) findViewById(R.id.deistir);
Log.e(“Logcat Deneme”,“Hata (Kırmızı)”);
Log.w(“Logcat Deneme” , “Uyarı (Turuncu)”);
Log.i(“Logcat Deneme”, “Bilgi (Yeşil)”);
Log.d(“Logcat Deneme”, “Hata Ayıklama (Mavi)”);
Log.v(“Logcat Deneme”, “Ayrıntı (Siyah)”);
Log.wtf(“Logcat Deneme”, “What a Terrible Fail (Kırmızı)”);
Log.i(“TeknolojiTC”, “Program Calıstı.”);
deger.setText(“Sayi’nin değeri ; “ + sayi);
Log.i(“ATeknolojiTC”, “sayımızın değeri ; “ + sayi);
DebugYapiyorum();
arttir.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
deger.setText(“Sayi’nin değeri ; “ + ++sayi);
Log.i(“TeknolojiTC”, “sayımızın değeri ; “ + sayi);
Toast.makeText(getApplicationContext(), “sayı değeri 1 arttırıldı”, Toast.LENGTH_SHORT).show();
}
});
deistir.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
deger.setTextColor(Color.WHITE);
arkaPlan.setBackgroundColor(Color.rgb(255, 0, 0));
Toast.makeText(getApplicationContext(), “Arka plan değiştirildi.”, Toast.LENGTH_SHORT).show();
Log.i(“TeknolojiTC”, “Arka plan rengi Kırmızı oldu.”);
}
});
}
public void DebugYapiyorum(){
Toast.makeText(getApplicationContext(), “Debug Yapıyorum!”, Toast.LENGTH_SHORT).show();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:paddingBottom=“@dimen/activity_vertical_margin”
android:paddingLeft=“@dimen/activity_horizontal_margin”
android:paddingRight=“@dimen/activity_horizontal_margin”
android:paddingTop=“@dimen/activity_vertical_margin”
tools:context=“.Debugging” >
<RelativeLayout
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:id=“@+id/arkaplan”
>
<Button
android:id=“@+id/deistir”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignParentBottom=“true”
android:layout_alignParentLeft=“true”
android:layout_marginBottom=“51dp”
android:layout_marginLeft=“28dp”
android:text=“Değiş” />
<Button
android:id=“@+id/arttir”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignBaseline=“@+id/deistir”
android:layout_alignBottom=“@+id/deistir”
android:layout_alignParentRight=“true”
android:layout_marginRight=“59dp”
android:text=“Arttır” />
<TextView
android:id=“@+id/deger”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:layout_alignParentLeft=“true”
android:gravity=“center”
android:layout_centerInParent=“true”
android:textAppearance=“?android:attr/textAppearanceLarge” />
</RelativeLayout>
</RelativeLayout>
|
Örneğimizi Print Debugging ile inceleyecek olursak;
Programım çalıştırılabiliyor mu? İlk başta aldığım sayı değerim kaç? Buton yardımı ile bu sayının değerini arttırabiliyor muyum? Arka planımı butonum yardımıyla değiştirebiliyor muyum? Bu soruların hepsi koda yazılan “Log”lar ile kontrol edilebilir. Bunun haricinde android için “Toast” mesajları da print debugging’e örnektir.
Remote Debugging (Uzaktan Hata Ayıklama)yapacak olursak;
Uzaktan hata ayıklama breakpointler yardımı ile yapılan debugging çeşididir. Breakpoint : Kodun durmasını istediğimiz duraklar şeklinde tanımlanır. Breakpoint konacak satıra imleci getirip ctrl+shitf+b’ye basılarak veya sol kenardaki şeride çift tıklanarak konur. Gerekli yerlere breakpoinler koyulduktan sonra debug modunda proje çalıştırılabilir(Kısayol : F11).
Uygulama debug modunda çalışırken ekranda ilk olarak bir uyarı çıkacaktır.
Çıkan uyarıdan sonra ilk breakpointten başlamak üzere debugging yapılmaya başlanır.
Resume (F8):Breakpointte duran programımın diğer breakpointe kadar çalışmasını sağlar.
Step Into (F5):Breakpoint’imizin bulunduğu yerde bir metot var ise o metotun içine girilir. (İçine girdiğimiz metot’un breakpoint ile belirlenip belirlenmediğine bakmazsızın.)
Step Over (F6):Programın bulunduğu yerden bir satır ilerlemesini sağlanır.Özellikle metotların içerisinde ilerlemede kullanılır.
Step Return(F7):İçine girilen metottan geri çıkılmasını sağlar.Metoda girmeden önceki yere gidilir.Metot içerisine tamamen bakılmış olup olmamasına bakmaz.
Breakpoint sekmesinde noktalarımızı nereye koyduğumuzu Variables sekmesinde ise alınan değişkenlerin değerini görürüz. Variables sekmesinde ki diğer özellik ise alınan değişkenlerin değerinin güncellenebilmesidir. Bu da bize esnek bir yapı sağlar. İşlemler tamamlandıktan sonra Disconnect’ e tıklanıp java kısmına geçiş yaparak düzenlemeler bitirilir.