Diyelim ki böyle bir fonksiyonumuz var:
public void myStart()
{
for (int i = 0; i<10; i++) myFunction(i);
}
private int myFunction(int a)
{
a = foo(a);
a = bar(a);
return a;
}
private int foo(int a)
{
//do something here
//something gnarly here
//etc
return aValue;
}
private int bar(int a)
{
// do something here
//return aValue;
}
Şimdi her ne sebeple olursa olsun, kodumuz çalışmıyor. Belki bir hata atıyor, belki yanlış değeri döndürüyor, belki sonsuz bir döngüde sıkışmış.
Herhangi bir ilk yıl programcı ilk şey, konsol / std out, (bir hata ayıklayıcı kullanmayı öğrenmeden önce Hello World yazdırmayı öğrendim).
Örneğin bu kodda hata ayıklamak için aşağıdakileri yapabilirler:
private int myFunction(int a)
{
print("before foo: a=" + a);
a = foo(a);
print("before bar: a=" + a);
a = bar(a);
return a;
}
private int foo(int a)
{
//do something here
print ("foo step1: a=" + a);
//something gnarly here
print ("foo step2: a=" + a + " someOtherValue="+ someOtherValue + " array.length= " + someArray.length());
//etc
return aValue;
}
private int bar(int a)
{
// do something here
//return aValue;
}
Şimdi kodu çalıştırıyorlar, büyük bir konsol çıktısı alıyorlar, bu da işlerin yanlış gittiğini izlemek için geçebiliyorlar.
Elbette bir alternatif, kesme noktaları ayarlamak ve her noktada kod boyunca adım atmaktır.
Konsolda yazdırmanın en büyük avantajlarından biri, geliştiricinin adımların tıklanması gerekmeden değerlerin akışını tek seferde görebilmesidir.
Ama dezavantajı, daha sonra kaldırılması gereken tüm bu basılı ifadeler ile kodunuzu bilmece.
(Hata ayıklayıcıya bir günlüğe yalnızca belirli değerleri yazdırmasını söylemek mümkün mü?, Kesme noktaları kodu gerçekten değiştirmeden kolayca eklenebilir veya kaldırılabilir.)
Hala konsol baskısını birincil hata ayıklama yöntemi olarak kullanıyorum, bunun başka bir şeyle karşılaştırıldığında bunun ne kadar yaygın / etkili olduğunu merak ediyorum.