Alıştırma - Visual Studio ile hata ayıklama
Yeni edinilen hata ayıklama bilgilerinizi uygulamaya geçirmenin zamanı geldi. bu işteki ilk gününüz ve şirketin en önemli ürünü olan Fibonacci hesaplayıcısındaki bir hatayı düzelterek .NET hata ayıklama becerilerinizi ortaya koymak istiyorsunuz.
Hata ayıklama için örnek bir .NET projesi oluşturma
.NET hata ayıklaması için Visual Studio'yu ayarlamak için öncelikle bir .NET projesine ihtiyacımız var. Visual Studio, yeni proje oluşturmayı kolaylaştıran birçok başlangıç şablonu sağlar.
Visual Studio'da DosyaYeni Proje'yi>> seçin.
Yeni proje oluştur iletişim kutusunda Konsol Uygulaması'nı ve ardından İleri'yi seçin.
Projeye DotNetDebugging adını verin ve kaydetmek istediğiniz konumu seçin. Diğer değerleri varsayılan değerlerinde bırakın ve İleri'yi seçin.
Son ekranda Oluştur'u seçin.
Visual Studio, seçtiğimiz şablonu kullanarak Konsol projesini oluşturur. Proje yüklendikten sonra seçerek Program.cs açın.
Fibonacci program mantığını ekleme
Şu anki projemiz konsola "Merhaba Dünya" mesajı yazıyor, bu nedenle hata ayıklayacak çok şeyimiz yok. Bunun yerine, Fibonacci dizisinin N. sayısını hesaplamak için kısa bir .NET programı kullanalım.
Fibonacci dizisi, 0 ve 1 ile başlayan ve her sayının kendisinden önce gelen iki sayının toplamı olduğu bir sayı dizisidir. Sıra burada gösterildiği şekilde devam eder:
0, 1, 1, 2, 3, 5, 8, 13, 21...
Aşağıdaki örnek kod bir hata içerdiğinden sorunu tanılamak ve çözmek için Visual Studio'nun hata ayıklama araçlarını kullanalım.
- Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:
int result = Fibonacci(5);
Console.WriteLine(result);
static int Fibonacci(int n)
{
Console.WriteLine("The output is: ");
int n1 = 0;
int n2 = 1;
int sum;
for (int i = 2; i < n; i++)
{
sum = n1 + n2;
n1 = n2;
n2 = sum;
}
return n == 0 ? n1 : n2;
}
Not
Bu kod, bu modülde daha sonra ayıklayacağımız bir hata içeriyor. Bu hata düzeltilene kadar, söz konusu kodu görev açısından kritik Fibonacci uygulamalarında kullanmamanızı öneririz.
Dosyayı Windows ve Linux için Ctrl+S tuşlarıyla kaydedin. Mac için Cmd+S tuşlarını seçin.
Hata ayıklamadan önce güncelleştirilmiş kodun işleyişine göz atalım. Visual Studio komut çubuğundaki yeşil başlangıç düğmesine basarak programı çalıştırın.
Hata ayıklama konsolu çıkışının sonunda, programın konsola 3 yazdığını ve ardından 0 koduyla çıktığını görebilirsiniz. Genellikle program çıkış kodu 0 olduğunda, bu durum programın çalıştığını ve kilitlenmeden kapandığını gösterir. Ancak, çökme ve doğru değer döndürme arasında bir fark vardır.
Bu örnekte, programın Fibonacci dizisinin beşinci değerini hesaplamasını istemiştik:
0, 1, 1, 2, 3, 5, 8, 13, 21...
Bu listedeki beşinci değer 5 olmasına rağmen programımız 3 değerini döndürdü. Bu hatayı tanılayıp düzeltmek için hata ayıklayıcıyı kullanalım.
Kesme noktalarını ve adım adım yürütmeyi kullanma
üzerinde 1
int result = Fibonacci(5);sol kenar boşluğuna tıklayarak kesme noktası ekleyin.Hata ayıklamayı yeniden başlatın. Program yürütülmeye başlar. Ayarladığınız kesme noktası nedeniyle yürütme duraklatılarak 1. satırda kırılır.
Fibonacci()işlevine geçmek için hata ayıklayıcı denetimlerini kullanın.
Değişkenlerin durumunu denetleme
Şimdi, Locals penceresini kullanarak farklı değişkenlerin değerlerini incelemek için biraz zaman ayırabilirsiniz.
-
nparametresi için gösterilen değer nedir? - İşlevin yürütülmesinin başında
n1,n2vesumyerel değişkenlerinin değerleri neydi?
Daha sonra
forhata ayıklama komutunu kullanarak döngüsüne ilerleyeceğiz.
fordöngüsünün içindeki ilk satıra ulaşana kadar ilerlemeye devam edin. Şu şekilde başlayan satır:sum = n1 + n2;
Not
Satırda for(...) {} gezinmek için komutlarda birden çok adım gerektiğini fark edebilirsiniz. Bu durum, bu satırda birden çok deyim olmasından kaynaklanır. İlerlediğinizde, kodunuzda sonraki ifadeye geçersiniz. Genellikle her satırda bir deyim bulunur. Eğer durum böyle değilse, bir sonraki satıra geçmek için birden fazla adıma ihtiyaç duyarsınız.
Kodu düşünün
Hata ayıklamanın önemli bir kısmı, ara vermek ve kod parçalarının (döngüler gibi işlevler ve bloklar) ne yapmaya çalıştığına ilişkin bilgiye dayalı tahminler yapmaktır. Emin değilseniz sorun değil, bu da hata ayıklama sürecinin bir parçasıdır. Ancak hata ayıklama işlemine etkin bir şekilde girişmiş olmak hataları çok daha hızlı bulmanıza yardımcı olur.
Ayrıntılara ilerlemeden önce, Fibonacci dizisinin 0 ve 1 ile başlayan ve her sayının kendisinden önce gelen iki sayının toplamı olduğu bir sayı dizisi olduğunu anımsayalım.
Bunun anlamı:
Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(2) = 1 (0 + 1)
Fibonacci(3) = 2 (1 + 1)
Fibonacci(4) = 3 (1 + 2)
Fibonacci(5) = 5 (2 + 3)
Bu tanımı anlayıp bu for döngüsüne bakarak şunu çıkarabiliriz:
- Döngü 2 ila
n(aradığımız Fibonacci dizisi sayısı) arasındaki sayıları sayıyor: -
ndeğeri 2'den küçükse, döngü hiçbir zaman çalışmaz. İşlevinreturnsonundaki deyim 0 isen0, 1 veya 2 isen1 döndürür. Bu değerler fibonacci serisindeki sıfır, ilk ve ikinci değerlerdir. -
n2'den büyük olduğunda daha ilgi çekici bir durum ortaya çıkar. Bu durumlarda, geçerli değer önceki iki değerin toplamı olarak tanımlanır. Yani bu döngüde, önceki iki değern1ven2, geçerli yineleme değeri isesumolur. Bu mantık nedeniyle, önceki iki değerin toplamını her seferinde bulupsumolarak ayarladığımızda,n1ven2değerlerimizi güncelleriz.
Bunun üzerinde daha fazla düşünmemiz gerekmiyor. Hata ayıklayıcımıza biraz güvenebiliriz. Ancak kod üzerine düşünmek ve beklediğimiz işlemi yapıp yapmadığını görmek, yapmadığında ise buna dair bilgi sahibi olmak önemlidir.
Hatayı kesme noktalarıyla belirle
Kodunuzu adım adım incelemek faydalı olabilir, ancak zahmetlidir. Özellikle döngülerle veya tekrar tekrar çağrılan başka bir kodla çalışırken. Döngüde defalarca ilerlemek yerine, döngünün ilk satırında bir kesme noktası ayarlayabiliriz.
Kesme noktalarımızı nereye koyduğumuz konusunda stratejik olmak önemlidir. Geçerli en yüksek Fibonacci değerini temsil ettiğinden, sum değeriyle özel olarak ilgileniyoruz. Bu nedenle, kesme noktamızı ayarlandıktan sonrasum satıra yerleştirelim.
14. satıra ikinci bir kesme noktası ekleyin.
Not
Kodunuzu çalıştırmaya devam edip bir veya iki satır atladığınızı fark ederseniz kesme noktalarınızı daha verimli satırlarla kolayca güncelleştirebilirsiniz.
Artık döngüde iyi bir kesme noktası ayarladığımıza göre, kesme noktasına isabet edene kadar ilerlemek için hata ayıklayıcı denetimlerinde Devam'ı seçin. Yerel değişkenlerimize baktığımızda aşağıdaki satırları görüyoruz:
n [int]: 5 n1 [int]: 0 n2 [int]: 1 sum [int]: 1 i [int]: 2Bu satırların hepsi doğru görünüyor. Döngüdeki ilk zaman noktasında, önceki iki değerin
sumdeğeri 1’dir. Satır satır ilerlemek yerine, döngüdeki sonraki zaman noktasına atlamak için kesme noktalarımızdan yararlanabiliriz.Sonraki kesme noktasına (döngüdeki bir sonraki geçiş) ulaşana kadar program akışını devam ettirmek için Devam Et’i seçin.
Not
Devam Et seçeneğini kullandığınızda hatayı atlayabileceğiniz konusunda endişelenmeyin. Sorunu bulmak için kodda birkaç kez hata ayıklayabilirsiniz. Birkaç kez yapmak, genellikle çok dikkatli bir şekilde adımlamaya kıyasla daha hızlı olur.
Bu kez, aşağıdaki değerleri görüyoruz:
n [int]: 5 n1 [int]: 1 n2 [int]: 1 sum [int]: 2 i [int]: 3Bu değerler hala mantıklı mı? Öyle görünüyor. Üçüncü Fibonacci sayısı için,
sumdeğerimizin 2’ye eşit olmasını bekliyoruz ve öyle olduğunu görüyoruz.Yeniden döngüye almak için Devam'ı seçin.
n [int]: 5 n1 [int]: 1 n2 [int]: 2 sum [int]: 3 i [int]: 4Sonuç doğru. Dizideki dördüncü değerin 3 olmasını bekliyoruz.
Bu noktada, kodun aslında tamamen sorunsuz olduğunu ve hatanın hayal ürününüz olduğunu düşünmeye başlamış olabilirsiniz. Döngüyü son bir kez daha tekrarlayalım. Bir kez daha Devam Et’i seçin.
Programın çalışması tamamlandı ve çıkış 3! Sonucumuz yanlış.
Artık kodun
ideğeri 4’e eşit olana kadar döngüde düzgün bir şekilde çalıştığını, ancak son değeri hesaplamadan programdan çıktığını biliyoruz. Hatanın yerini belirledik.Şimdi 18. satırda şu şekilde bir kesme noktası daha ayarlayalım:
return n == 0 ? n1 : n2;Bu kesme noktası, işlevden çıkmadan önce program durumunu incelememize olanak tanır. 1. ve 13. satırlardaki önceki kesme noktalarımızdan bekleyebileceğiniz her şeyi zaten öğrendik, böylece bunları temizleyebiliyoruz.
1. ve 13. satırlardaki önceki kesme noktalarımızı kaldırın. Satır numaralarının yanındaki kenar boşluğunda kesme noktalarını seçin veya sol alttaki kesme noktaları bölmesindeki 1. ve 13. satırlar için kesme noktası onay kutularını temizleyin.
Artık neler olduğunu daha iyi anladığımıza göre, programımızın yanlış davranışlarını yakalamak için tasarlanmış bir kesme noktası ayarladık. Şimdi bu hatayı yakalayabilmeliyiz!
Hata ayıklayıcıyı son kez çalıştırın.
n [int]: 5 n1 [int]: 2 n2 [int]: 3 sum [int]: 3Fibonacci(5) istediğimiz halde, yanlışlıkla Fibonacci(4) aldık ki bu yanlıştı. Bu işlev
n2değerini döndürür, her döngü yinelemesisumdeğerini hesaplar ven2değerinisumdeğerine eşit olacak şekilde ayarlar.Bu bilgileri ve önceki hata ayıklama çalıştırmamızı temel alarak, döngünün
ideğeri 5 değil, 4 olduğunda çıkış yaptığını görebiliriz.Şimdi döngü deyimimize
forbiraz daha yakından bakalım.for (int i = 2; i < n; i++)Bu mantık, for döngüsünün üst kısmı
ideğerininolarak gördüğünde, programın hemen çıkmasına neden olur. Bu,i'ınn'e eşit olduğu durum için döngü kodunun çalışmadığı anlamına gelir.i <= ndeğerine ulaşana kadar çalıştırmak istiyorduk, ancak bunun yerine şu senaryo gerçekleşiyor:for (int i = 2; i <= n; i++)Yani bu değişiklikle birlikte, güncelleştirilmiş programınızın bu örnekteki gibi görünmesi gerekir:
int result = Fibonacci(5); Console.WriteLine(result); static int Fibonacci(int n) { Console.WriteLine("The output is: "); int n1 = 0; int n2 = 1; int sum; for (int i = 2; i <= n; i++) { sum = n1 + n2; n1 = n2; n2 = sum; } return n == 0 ? n1 : n2; }Henüz yapmadıysanız hata ayıklama oturumunu durdurun.
Önceki değişikliği 11. satırda yapın ve kesme noktanızı 18. satırda bırakın.
Hata ayıklayıcıyı yeniden başlatın. Bu kez, 18. satırdaki kesme noktasına bastığımızda aşağıdaki değerleri görürüz:
n [int]: 5 n1 [int]: 3 n2 [int]: 5 sum [int]: 5Selam! Bu kez başardık! Harika bir iş, Fibonacci, Inc. için günü kurtardın!
Programın doğru değeri döndürdüğünden emin olmak için Devam Et’i seçin.
5 The program '[105260] DotNetDebugging.dll' has exited with code 0 (0x0).Böylece doğru çıktıyı veriyor.
Başardınız! Visual Studio'da .NET hata ayıklayıcısını kullanarak yazmadığınız bazı kodlarda hata ayıkladınız.
Bir sonraki ünitede, .NET'te yerleşik olarak bulunan günlüğe kaydetme ve izleme özelliklerini kullanarak yazdığınız kodun hatalarını ayıklamayı nasıl kolaylaştıracağınızı öğreneceksiniz.