Bu bölümde, Visual Studio veya Visual Studio Code gibi hata ayıklama araçlarına sahip bir kod düzenleyici kullanarak C# geliştirme aşamasında hataların nasıl ayıklanacağı konusunu ele alacağız.
Örnek – Bilinçli Hata Oluşturma
Aşağıdaki kod örneğimizde bilinçli olarak bir hata oluşturulmuştur. Toplama işlemi yapmak için planlanan add metodunda yazılımcıdan kaynaklı olarak çarpma işlemi yapıldığı bir senaryo düşenlim.
double a = 4.5;
double b = 2.5;
double answer = Add(a, b);
Console.WriteLine($"{a} + {b} = {answer}");
double Add(double a, double b)
{
return a * b; //bug!
}
Aşağıdaki çıktıda gösterildiği gibi uygulamayı çalıştırdığınız yanlış bir sonuç yansıyacaktır.
4.5 + 2.5 = 11.25
Gördüğünüz gibi 2,5 + 4,5 = 7 sonucunu beklerken 11,25 sonucuyla karşılaştık. O zaman şimdi hatayı bulmak ve ortadan kaldırma zamanı. Bunun için hata ayıklama araçlarını kullanalım.
Breakpoint Kurma ve Debug Mod’da Çalıştırma
Visual Studio 2022
double a adlı değişkeni bildiren kod satırının (1. satır) solunda bulanan gri alana tıklayınız. (üzerine gelince gri yuvarlak bir top simgesi beliyecektir tıklayınca kırmızıya dönecektir.) İkinci bir yöntem olarak ise Breakpoint bırakmak istediğiniz kod satıran imlecinizi bırakınız ve F9 tuşuna basınız veya üst menüyü kullanarak Debug>Toggle Breakpoint butonuna tıklayabilirsiniz.
Aynı adımları takip ederek eklediğiniz breakpoint’lerinizi kaldırabilirsiniz.
Şimdi üst menüyü kullanarak Debug>Start Debug ve F5 tuşuna basarak konsol uygulamasını başlatın. Uygulama, derleme sırası breakpoint’e ulaştığında duraklar. Hata Ayıklama araç çubuğu görünür. Bundan sonra yürütülecek satır sarı renkle vurgulanır.
Visual Studio Code
Visual Studio ile yaptığımız işlemlerin hemen hemen aynısını yaparak breakpoint ekleyebilirsiniz. Breakpoint eklemek için, satır numarasının sol tarafındaki boşluğa tıklayın veya F9 tuşuna basın.
Bazı durumlarda, breakpoint’iniz üzerinde sağ tıklayarak ek özellikler ayarlayabilirsiniz. Örneğin, bir breakpoint’i pasif hale getirebilir veya koşul ekleyebilirsiniz. Bu, breakpoint’in sadece belirli bir koşul karşılandığında çalışmasını sağlar.
Şimdi Programınızı debug modda çalıştırın. Program belirli bir breakpoint’e geldiğinde, çalışma duracak ve Visual Studio Code debug moduna geçecektir.
Çalıştırmak için Üst menüden Run>Start Debug (F5) veya sol gezinme çubuğunda Run and Debug butonuna tıklayabilir veya Ctrl + Shift + D (Windows’ta) tuşlarına basabilirsiniz.
Visual Studio Code, konsol uygulamasını başlatır ve breakpoint noktasına ulaştığında duraklar. Bundan sonra yürütülecek satır sarı renkle vurgulanır.
Debugging Toolbar
Visual Studio ve Visual Studio Code’unhata ayıklamayı başlatmak veya devam ettirmek ve çalışan koddaki değişiklikleri çalışırken yeniden yüklemek için Hata Ayıklama araç çubuğu bulunur. Bu araç çubuğu Visual Studio üzerinde menude sabit olarak bulunurken Visual Studio Code ise kayan bir araç çubuğu olarak gösterirlir.
Aşağıdaki listede araç çubuklarındaki en yaygın düğmeler açıklanmaktadır:
Start/Continue/F5: Bu buton olaya duyarlıdır. Ya bir projeyi çalışır durumda başlatır ya da projeyi mevcut konumdan bitene ya da bir breakpoint noktasına ulaşana kadar çalıştırmaya devam eder.
Hot Reload: Bu buton, derlenmiş kod değişikliklerini uygulamayı yeniden başlatmaya gerek kalmadan yeniden yükleyecektir.
Break All: Bu buton, çalışan bir uygulamada bir sonraki kullanılabilir kod satırına geçecektir.
Stop Debugging/Stop/Shift + F5 (red square): Bu buton hata ayıklama oturumunu durduracaktır.
Restart/Ctrl or Cmd + Shift + F5 (circular arrow): Bu buton hata ayıklayıcı yeniden eklenmiş olarak programı yeniden başlatacaktır.
Show Next Statement: Bu buton mevcut imleci bir sonraki ifadeye taşıyacaktır.
Step Into/F11, Step Over/F10, and Step Out/Shift + F11 (blue arrows over dots): Bu butonlar birazdan göreceğiniz gibi, kod ifadelerinde çeşitli şekillerde ilerleyin.
Show Threads in Source: Bu düğme, iş parçacıklarını incelemenize ve bunlarla çalışmanıza olanak tanır.
Debugging Pencereleri
Hata ayıklama sırasında hem Visual Studio hem de Visual Studio Code, bizlere ekstra pencereler gösterir. Bu pencelere kodunuzda adım adım ilerlerken değişkenler gibi yararlı bilgileri izlemek için kullanılır. En kullanışlı pencereler aşağıdaki listede açıklanmıştır:
VARIABLES (Değişkenler): Yerel değişkenlerin adını, değerini ve türünü otomatik olarak gösteren Locals (Yereller) dahil olmak üzere değişkenler. Kodunuzu adım adım takip ederken bu pencereye dikkat edin.
WATCH (İzleme): Manuel olarak girdiğiniz değişkenlerin ve ifadelerin değerini gösteren Watch (İzle) veya Watch 1.
BREAKPOINTS (Kırılıma Noktaları): Tüm kırılma noktalarınızı gösteren ve bunlar üzerinde daha ince kontrol sağlayan Breakpoints (Kırılma Noktaları).
DEBUG CONSOLE (Hata Ayıklama Konsolu): veya Immediate Window (Hemen İfade Penceresi), kodunuzla canlı etkileşim sağlar. Program durumunu sorgulayabilirsiniz, örneğin bir değişkenin adını yazarak. Örneğin, “1+2 kaç eder?” sorusunu sormak için 1+2 yazıp Enter tuşuna basabilirsiniz.
Kodda Adım Adım Ilerleme
Kod üzerinde adım adım ilerlemenin yollarını Visual Studio veya Visual Studio Code’da benzer şekilde gerçekleşir. Şimdi hep birlikte keşfedelim:
Run or Debug | Step Into menüsüne gidin, Araç Çubuğundaki Step Into git düğmesine tıklayın veya F11 tuşuna basın. Sarı vurgu bir satır ileri adım atar.
Run or Debug | Step Over menüsüne gidin, Araç Çubuğundaki Step Over düğmesine tıklayın veya F10 tuşuna basın. Sarı vurgu bir satır ileri adım atar. Şu anda, Step Into veya Step Over kullanımı arasında fark görmüyorsunuz çünkü tek bir ifadeyi yürütüyoruz.
Şu anda, Add metodunu çağıran satırda olmalısınız. Step Into ve Step Over arasındaki fark, bir metod çağrısını yürütmeye geldiğinizde görülebilir:
Step Into’ya tıklarsanız, hata ayıklayıcı metodun içine girer ve o metodun her satırını adım adım gezer.
Step Over’a tıklarsanız, bütün metod bir seferde yürütülür.
Add metodunun içine girmek için Step Into’ya tıklayın.
Kod düzenleme penceresinde a veya b parametrelerinin üzerine gelerek, şu anki değerlerini gösteren bir araç ipucunun göründüğünü fark edin.
a * b ifadesini seçin, ifadenin üzerine sağ tıklayın ve Add to Watch’ı veya Add Watch’ı seçin. Bu operatörün a’yı b ile çarparak sonucu 11.25 olarak verdiğini gösteren WATCH veya Watch 1 penceresine ifade eklenir.
WATCH veya Watch 1 penceresinde, ifadenin üzerine sağ tıklayın ve Remove Expression’ı veya Delete Watch’i seçin.
Add fonksiyonundaki * işaretini + ile değiştirerek hatayı düzeltin.
Yeniden hata ayıklamayı, dairesel ok Restart düğmesine tıklayarak veya Ctrl veya Cmd + Shift + F5 tuşlarına basarak başlatın.
Fonksiyonun üzerinden atlayın, şimdi doğru hesaplamaları nasıl yaptığını fark edin ve Continue düğmesini tıklayın veya F5 tuşuna basın.
Visual Studio Code ile, hata ayıklama sırasında konsola yazı yazarken, çıktının TERMINAL penceresi yerine DEBUG CONSOLE penceresinde göründüğüne dikkat edin.
Breakpoint Özelleştirme
Belirli koşullara göre breakpoint’leri özelleştirmek oldukça kolaydır:
Eğer hala debugging modundaysanız, debugging araç çubuğundaki Stop düğmesine tıklayın, Run veya Debug | Stop Debugging menüsüne gidin veya Shift + F5 tuşlarına basın.
Run | Remove All Breakpoints veya Debug | Delete All Breakpoints. menüsüne gidin.
Yanıtı yazdıran WriteLine ifadesine tıklayın.
Bir breakpoint noktası ayarlamak için F9 tuşuna basın veya Run or Debug | Toggle Breakpoint menüsüne gidin.
breakpoint’e sağ tıklayın ve kod düzenleyiciniz için uygun menüyü seçin:
Visual Studio Code’da, Edit Breakpoint…. seçeneğini seçin.
Visual Studio’de, Conditions…. seçeneğini seçin.
Bir ifade girin, örneğin yanıt değişkeninin 9’dan büyük olması gerektiği gibi, ardından Enter tuşuna basarak kabul edin ve breakpoint noktasının etkinleşmesi için ifadenin doğru değerlendirilmesi gerektiğini unutmayın.
debug’I başlatın ve breakpoint’in etkinleşmediğini fark edin.
debug’ı durdurun.
breakpoint’i veya koşullarını düzenleyin ve ifadesini 9’dan küçük olacak şekilde değiştirin.
debug başlatın ve breakpoint’in etkinleştiğini fark edin.
debug’ı durdurun.
breakpoint’i veya koşullarını düzenleyin (Visual Studio’da, Add condition’a tıklayın), Hit Count’u seçin, ardından 3 gibi bir sayı girin, bu da breakpoint’i etkinleştirmeden önce üç kez breakpoint noktasına ulaşmanız gerektiği anlamına gelir.
Fareyi breakpoint’e kırmızı daire üzerine getirerek özet bilgiyi görmek için bekleyin. Artık bazı hata ayıklama araçları kullanarak bir hatayı düzelttiniz ve breakpoint ayarlama konusunda bazı gelişmiş olasılıkları gördünüz.
Hot Reload
Hot Reload, bir yazılım geliştirme sürecinde kod değişikliklerinin anında uygulanmasını ve etkilerinin hemen görülmesini sağlayan bir özelliktir. Bu özellik genellikle geliştiricilerin yazılımı hızlı bir şekilde geliştirme ve hataları daha kolay tespit etme amacıyla kullanılır.
Hot Reload özelliği, bir uygulama çalışırken, kod üzerinde yapılan değişikliklerin derleme ve yeniden başlatma işlemleri olmadan doğrudan uygulanabilmesini sağlar.
Hot Reload Visual Studio
Hot Reload özelliğini Visual Studio da test edelim.
HotReloading” adında yeni bir Console App / konsol projesi ekleyin.
Program.cs dosyasına gidin, var olan ifadeleri silin ve ardından aşağıdaki kodu kullanarak konsola her iki saniyede bir bir mesaj yazdırın:
class Program
{
static void Main()
{
while (true)
{
Console.WriteLine("Merhaba, bu bir hot reload testidir!");
Thread.Sleep(2000); // 2 saniye bekle
}
}
}
Bu adımlar, her iki saniyede bir “Merhaba, bu bir hot reload testidir!” mesajını konsola yazan basit bir konsol uygulaması oluşturacaktır. Şimdi ise Hot Reload’u kullanarak kodumuzda değişiklikler yapalım.
Visual Studio 2022’de projeyi başlatın ve mesajın her iki saniyede bir çıktısını gözlemleyin.
Projeyi çalışır halde bırakın.
Program.cs dosyasına gidin ve “Hello” yerine “Goodbye” yazın.
Debug | Apply Code Changes’a gidin veya Araç Çubuğundaki Hot Reload düğmesine tıklayın.
Değişikliğin, konsol uygulamasını yeniden başlatmadan uygulandığını gözlemleyin. Hot Reload düğmesinin menüsünü açın ve Dosya Kaydedildiğinde Hot Reload’u seçin.
Mesajı tekrar değiştirin, dosyayı kaydedin ve konsol uygulamasının otomatik olarak güncellendiğini unutmayın.