Alıştırma - Değişkenleri ve yürütme akışını izleme

Tamamlandı

RUN AND DEBUG görünümü, geliştiricilere değişkenleri ve ifadeleri izlemek, yürütme akışını gözlemlemek ve hata ayıklama işlemi sırasında kesme noktalarını yönetmek için kolay bir yol sağlar.

Çalıştır ve Hata Ayıkla görünümünün bölümlerini inceleme

RUN AND DEBUG görünümünün her bölümü benzersiz özellikler sağlar. Hata ayıklama işlemi sırasında bu bölümlerin bir bileşimini kullanmak genellikle yararlıdır.

DEĞIŞKENLER bölümü

Değişken durumunu izlemek, kod hata ayıklamanın önemli bir yönüdür. Değişken durumundaki beklenmeyen değişiklikler genellikle kodunuzdaki mantık hatalarını belirlemenize yardımcı olur.

DEĞIŞKENLER bölümü, değişkenlerinizi kapsama göre düzenler. Kapsam, Locals geçerli kapsamda bulunan değişkenleri (geçerli metot) görüntüler.

Uyarı

Konsol uygulamasının üst düzey deyimler bölümü kendi yöntemi olarak kabul edilir. adlı Mainbir yöntem.

Kapsam adının solundaki oku seçerek görüntülenen kapsamları açabilir (genişletebilirsiniz). Değişkenleri ve nesneleri de açabilirsiniz. Aşağıdaki ekran görüntüsü, numbers kapsamı altında açılmış Locals dizisini göstermektedir.

Çalıştır ve Hata Ayıkla görünümünün Değişkenler bölümünde bir değişkenin açılmış halini gösteren ekran görüntüsü.

DEĞIŞKENLER bölümünü kullanarak çalışma zamanında bir değişkenin değerini değiştirmek de mümkündür. Değişken adına çift tıklayıp yeni bir değer girebilirsiniz.

WATCH bölümü

Değişken durumunu zaman içinde veya farklı yöntemlerle izlemek istiyorsanız ne olur? Değişkeni her seferinde aramak yorucu olabilir. watch bölümü burada kullanışlı olur.

değişken adı veya izleyebileceğiniz bir ifade girmek için İfade Ekle düğmesini (artı işareti olarak görünür: +) seçebilirsiniz. Alternatif olarak, DEĞIŞKENLER bölümünde bir değişkene sağ tıklayıp öğesini seçebilirsiniz Add to watch.

WATCH bölümündeki tüm ifadeler kodunuz çalıştırılırken otomatik olarak güncelleştirilir.

CALL STACK bölümü

Kodunuz başka bir yöntemden bir yöntem girdiğinde, uygulamanın çağrı yığınına bir çağrı katmanı eklenir. Uygulamanız karmaşık hale geldiğinde ve diğer yöntemler tarafından çağrılan yöntemlerin uzun bir listesine sahip olduğunuzda, çağrı yığını yöntem çağrılarının izini temsil eder.

CALL STACK bölümü, bir özel durum veya WATCH ifadesi için kaynak konumu bulmaya çalışırken kullanışlıdır. Uygulamanız beklenmeyen bir özel durum oluşturursa, konsolda genellikle aşağıdakine benzer bir ileti görürsünüz:

Exception has occurred: CLR/System.DivideByZeroException
An unhandled exception of type 'System.DivideByZeroException' occurred in Debug1.dll: 'Attempted to divide by zero.'
    at Program.<<Main>$>g__WriteMessage|0_1() in C:\Users\howdc\Desktop\Debug1\Program.cs:line 27
    at Program.<<Main>$>g__Process1|0_0() in C:\Users\howdc\Desktop\Debug1\Program.cs:line 16
    at Program.<Main>$(String[] args) in C:\Users\howdc\Desktop\Debug1\Program.cs:line 10

Hata iletisinin at Program ... altındaki girintili satır grubuna yığın izleme adı verilir. Yığın izlemesi, özel duruma kadar çağrılan her yöntemin adını ve kaynağını listeler. Ancak bu bilgilerin deşifre edilmesi biraz zor olabilir, çünkü .NET çalışma zamanındaki bilgileri de içerebilir. Bu örnekte yığın izlemesi oldukça temizdir ve WriteMessage adlı bir yöntemde özel durumun oluştuğunu görebilirsiniz. Yığın, konsol uygulamasının en üst düzey deyimler bölümü olan Main adlı bir yöntemden kaynaklanır.

CALL STACK bölümü, .NET çalışma zamanı bilgileriyle karışık bir yığın izlemesini çözme zorluğunu önlemenize yardımcı olabilir. İstenmeyen bilgileri filtreleyerek varsayılan olarak yalnızca kendi kodunuzdaki ilgili yöntemleri gösterir. Özel durumun nereden kaynaklandığını bulmak için çağrı yığınını elle çıkarabilirsiniz.

"BREAKPOINTS" bölümü

BREAKPOINTS bölümü geçerli kesme noktası ayarlarını görüntüler ve hata ayıklama oturumu sırasında belirli kesme noktalarını etkinleştirmek veya devre dışı bırakmak için kullanılabilir.

Uygulamanızı yapılandırma ve yapılandırmayı başlatma

Kullanıcı girişini okuyan bir konsol uygulaması üzerinde çalışırken büyük olasılıkla başlatma yapılandırma dosyasını güncelleştirmeniz gerekir.

  1. Program.cs dosyanızdaki kodu aşağıdaki gibi güncelleştirin:

    string? readResult;
    int startIndex = 0;
    bool goodEntry = false;
    
    int[] numbers = { 1, 2, 3, 4, 5 };
    
    // Display the array to the console.
    Console.Clear();
    Console.Write("\n\rThe 'numbers' array contains: { ");
    foreach (int number in numbers)
    {
        Console.Write($"{number} ");
    }
    
    // To calculate a sum of array elements, 
    //  prompt the user for the starting element number.
    Console.WriteLine($"}}\n\r\n\rTo sum values 'n' through 5, enter a value for 'n':");
    while (goodEntry == false)
    {
        readResult = Console.ReadLine();
        goodEntry = int.TryParse(readResult, out startIndex);
    
        if (startIndex > 5)
        {
            goodEntry = false;
            Console.WriteLine("\n\rEnter an integer value between 1 and 5");
        }
    }
    
    // Display the sum and then pause.
    Console.WriteLine($"\n\rThe sum of numbers {startIndex} through {numbers.Length} is: {SumValues(numbers, startIndex)}");
    
    Console.WriteLine("press Enter to exit");
    readResult = Console.ReadLine();
    
    // This method returns the sum of elements n through 5
    static int SumValues(int[] numbers, int n)
    {
        int sum = 0;
        for (int i = n; i < numbers.Length; i++)
        {
            sum += numbers[i];
        }
        return sum;
    }
    
  2. Kodu gözden geçirmek için bir dakika bekleyin.

    Aşağıdakilere dikkat edin:

    • Kod, beş sayı içeren bir tamsayı dizisi belirtir.
    • Kod, çıktıyı konsolda görüntüler.
    • Kod, kullanıcıdan n ile n arasındaki dizi öğelerini toplamak için kullandığı başlangıç öğesi numarasını 5 girmesini ister.
    • Kod bir yöntemdeki toplamı hesaplar, sonuçları konsolda görüntüler ve sonra duraklatır.

    Uyarı

    HATA AYıKLAMA KONSOLU paneli konsolundan kullanıcı girişini desteklemez.

  3. Visual Studio Code Dosyası menüsünde Kaydet'i seçin.

  4. Çalıştır menüsünde Tüm Kesme Noktalarını Kaldır'ı seçin.

    Bu, önceki alıştırmadan kalan kesme noktalarını kaldırır.

  5. ÇALıŞTıR VE HATA AYıKLAMA görünümünde Hata Ayıklamayı Başlat'ı seçin.

  6. Dikkat edin, Console.Clear(); kod satırı çalıştırıldığında bir hata meydana gelir.

  7. Hata ayıklama araç çubuğunda Durdur'u seçin.

  8. EXPLORER görünümüne geçin ve launch.json dosyasını Düzenleyici'de açın.

  9. özniteliğinin console değerini aşağıdaki gibi güncelleştirin:

    "console":"integratedTerminal",
    
  10. Visual Studio Code Dosyası menüsünde Kaydet'i seçin ve launch.json dosyasını kapatın.

Uygulama çıkışını gözden geçirin ve sorunları belirleyin

Uygulamanızın çıktısını gözden geçirmek, kodunuzu yazarken göz ardı ettiğiniz mantık sorunlarını ortaya çıkarabilirsiniz.

  1. ÇALıŞTıR VE HATA AYıKLAMA görünümüne geri dönün.

  2. ÇALıŞTıR VE HATA AYıKLAMA görünümünde Hata Ayıklamayı Başlat'ı seçin.

    DEBUG CONSOLE panelinde görüntülenen iletiler, hata ayıklayıcının Debug101.dll uygulamasına bağlandığını gösterir.

  3. Hiçbir hata iletisinin görüntülenmediğini fark edin.

    Başlatma yapılandırma dosyasında console olan özniteliğin değerini integratedTerminal olarak değiştirmek konsol hatasını düzeltmiştir. Ancak şimdi çıkışınızı içeren konsolu bulmanız gerekir.

  4. Düzenleyici'nin altındaki Paneller alanında HATA AYıKLAMA KONSOLU panelinden TERMINAL paneline geçin.

  5. Kullanıcıdan n için bir değer girmesini isteyen iletide kod yürütmenin duraklatıldığını fark edin.

    TERMINAL panelindeki çıkış aşağıdaki gibi görünmelidir:

    
    The 'numbers' array contains: { 1 2 3 4 5 }
    
    To sum values 'n' through 5, enter a value for 'n':
    
  6. TERMINAL komut istemi penceresine 3 girin

  7. Uygulamadan çıktıyı gözden geçirin.

    TERMINAL panelindeki çıkış aşağıdaki gibi görünmelidir:

    
    The 'numbers' array contains: { 1 2 3 4 5 }
    
    To sum values 'n' through 5, enter a value for 'n':
    3
    
    The sum of numbers 3 through 5 is: 9
    press Enter to exit
    
  8. Konsolun en üstünde görüntülenen 3 ile 5 arasındaki dizi elemanlarının ve sum'in bildirilen değerini göz önünde bulundurmak için bir dakika ayırın.

    İletide şöyle yazıyor: The sum of numbers 3 through 5 is: 9. Ancak, 3 ile 5 arasında dizi öğeleri , 3ve 4şeklindedir5. Bildirilen toplamın 12 olması gerekmiyor mu?

    Sorunu araştırmak için ÇALıŞTıR VE HATA AYıKLAMA görünümünün DEĞIŞKENLER bölümünü kullanabilirsiniz.

Değişken durumunu izleme

Bazı durumlarda, uygulamanızdaki mantık sorununu tanımlamak için yalnızca değişken durumunu izlemek yeterlidir.

  1. Aşağıdaki kod satırında bir kesme noktası ayarlayın:

    Console.WriteLine($"\n\rThe sum of numbers {startIndex} through {numbers.Length} is: {SumValues(numbers, startIndex)}");
    
  2. ÇALıŞTıR VE HATA AYıKLAMA görünümünde Hata Ayıklamayı Başlat'ı seçin.

  3. HATA AYıKLAMA KONSOLU panelinden TERMINAL paneline geçin.

  4. TERMINAL komut istemi penceresine 3 girin

    Kod yürütme kesme noktasında duraklatılır.

  5. ÇALıŞTıR VE HATA AYıKLAMA görünümünün DEĞIŞKENLER bölümünü gözden geçirmek için bir dakika bekleyin.

    startIndex öğesine, girdiğiniz değer olan 3 atanmıştır.

  6. Adımla'ya tıklayın.

  7. VARIABLES ve CALL STACK bölümlerinin güncelleştirildiğini göreceksiniz.

    CALL STACK bölümü, kod yürütmenin SumValues yöntemine taşındığını gösterir.

    Yerel değişkenlerin listelendiği DEĞIŞKENLER bölümü, tamsayı ndeğerini gösterir. Yöntem parametresi n, yöntem çağrısı argümanı startIndex'den aldığı değerle atanır. Bu durumda, değişken adlarında yapılan değişiklik, bir referans işaretçisi değil, değerin geçirildiğini netleştirir.

    Uyarı

    Bu durumda kodunuzun çoğunu Düzenleyici'de görebilirsiniz, bu nedenle CALL STACK bölümüne ihtiyacınız olmayabilir, ancak derin iç içe ve birbirine bağlı yöntem çağrılarıyla daha büyük uygulamalar üzerinde çalışırken, CALL STACK bölümünde gösterilen yürütme yolu son derece yararlı olabilir.

  8. Atanan değer artık olmayana kadar sum seçmeye 0 devam edin.

  9. DEĞIŞKENLER bölümünde gösterilen bilgileri gözden geçirmek için bir dakika bekleyin.

    Aşağıdakileri görmeniz gerekir:

    Çalıştır ve Hata Ayıkla penceresinin Değişkenler bölümünü gösteren ekran görüntüsü.

    sum'ya atanan değerin 0'den 4'ye gittiğine dikkat edin.

  10. Diziyi numbers genişletmek için [int[]] sayılarını seçin.

    Çalıştır ve Hata Ayıkla görünümünün Değişkenler bölümündeki dizi elemanlarının genişletilmiş halini gösteren ekran görüntüsü.

  11. Dizi öğelerine sıfır tabanlı dizin numaraları kullanılarak erişildiğini hatırlayın.

    Bu durumda mantıksal hata, kullanıcı arabirimindeki yönergelerle temel alınan kod arasında bir tutarsızlıktır. Kullanıcı arabirimi 1-5 dizi öğelerine başvurur. Ancak kod, sıfır tabanlı dizi öğelerine erişmek için kullanıcı tarafından girilen değeri kullanır. Dizini 3 olan dizi öğesi değerini depolar 4. Kod sıfır tabanlı dizin numaralarını telafi etmez.

  12. Hata ayıklama oturumunu sonlandırmak için Durdur'u seçin.

  13. Sorunu nasıl çözebileceğini göz önünde bulundurmak için bir dakikanızı alın.

    Bu sorun, kullanıcı arabiriminde kullanıcıdan 0 ile 4 arasında bir değer girmesi istenerek düzeltilebilir. Kodda, girilen değerden 1 çıkarılarak da düzeltilebilir. Genel olarak konuşursak, hedefiniz net ve kolay bir kullanıcı arabirimi olmalıdır. Bu durumda kodu aşağıdaki gibi güncelleştirmek daha iyi olabilir:

    Console.WriteLine($"\n\rThe sum of numbers {startIndex} through {numbers.Length} is: {SumValues(numbers, startIndex - 1)}");
    

    Güncelleştirilmiş kodu çalıştırmak aşağıdaki çıkışı oluşturur:

    Uygulama mantığı güncelleştirildikten sonra çıkışı gösteren ekran görüntüsü.

  14. Önerilen yaklaşımı kullanarak kodunuzu güncelleştirin ve ardından Program.cs dosyanızı kaydedin.

  15. Kesme noktanızı temizleyin, hata ayıklayıcıda uygulamayı yeniden çalıştırın ve istenen sonucun TERMINAL'de görüntülendiğini doğrulayın.

    Bir mantık sorununu tanımlamak ve düzeltmek için değişken durumu kullandınız! Harika iş çıkardık.

İzleme ifadelerini takip etme

WATCH bölümü, bir veya daha fazla değişkeni temel alan ifadeleri izlemek için kullanılabilir.

Veri kümesinde sayısal hesaplamalar yapan bir uygulama üzerinde çalıştığınızı varsayalım. İki sayısal değişken arasındaki oran 5'ten büyük olduğunda kodunuzun güvenilir olmayan sonuçlar ürettiğine inanıyorsunuz. Hesaplanan oranı izlemek için WATCH bölümünü kullanabilirsiniz.

  1. Program.cs dosyasını aşağıdaki kodla güncelleştirin:

    bool exit = false;
    var rand = new Random();
    int num1 = 5;
    int num2 = 5;
    
    do
    {
        num1 = rand.Next(1, 11);
        num2 = num1 + rand.Next(1, 51);
    
    } while (exit == false);
    
  2. Program.cs dosyanızı kaydedin.

  3. Son kod satırında bir kesme noktası ayarlayın.

  4. Aşağıdaki WATCH ifadesini ayarlayın:

    num2 / num1 > 5
    
  5. ÇALıŞTıR VE HATA AYıKLAMA görünümünde Hata Ayıklamayı Başlat'ı seçin.

  6. DEĞIŞKENLER ve İzle bölümlerinde görüntülenen değerlere dikkat edin.

  7. Devam seçeneğini, WATCH ifadesinin sonucunu görene kadar seçin.true

    WATCH ifadesi ilk yinelemede true olarak değerlendirildiyse, birkaç kez daha Devam Et ya da ikinci kez true görene kadar seçeneğini belirleyin.

  8. WATCH bölümünün nasıl kullanıldığını göz önünde bulundurmak için bir dakika bekleyin.

    Bu senaryoda, iki sayısal değişken arasındaki oran 5'ten büyük olduğunda kodunuzun güvenilir olmayan sonuçlar ürettiğini belirlediniz. WATCH bölümünde bu koşulu temsil eden bir ifade oluşturacaksınız. Artık WATCH bölümünü kullanarak ilgili durumu izleyebilirsiniz.

DEĞIŞKENLER bölümünde bir değişkene atanan değeri değiştirme

Bazen el ile programlı koşul oluşturmak isteyebilirsiniz. RUN AND DEBUG görünümünün VARIABLES bölümü, çalışma zamanında bir değişkenin durumunu değiştirerek bunu yapmanızı sağlar.

  1. Çalıştırdığınız kodu gözden geçirmek için bir dakika ayırın.

    Kodun hiçbir zaman do döngüsünden çıkmayacağına dikkat edin çünkü exit hiçbir zaman true olmayacaktır. Bu, gerçek dünyadaki bir uygulamada değiştirmeniz gereken programlı bir koşul değildir, ancak özelliği gösterir.

  2. DEĞIŞKENLER bölümünde öğesine sağ tıklayın exit [bool]ve Değer Ayarla'yı seçin.

    DEĞIŞKENLER bölümü, çalışma zamanında bir değişkene atanan değeri değiştirmenize olanak tanır. Kodunuzun belirli bir koşula nasıl tepki olduğunu görmek istediğinizde bu yararlı olabilir.

  3. değerini exit olarak ayarlamak için truetrue yazın ve Enter tuşuna basın.

    Bu durumda, exit değerinin true olarak değiştirilmesi, while deyimi yürütülürken uygulamanın kapanmasına neden olur.

  4. Devam'ı seçin.

  5. HATA AYıKLAMA KONSOLU panelinde programdan çıkıldığını bildiren bir ileti görüntülendiğine dikkat edin.

Tebrikler! RUN AND DEBUG görünümünün VARIABLES ve WATCH bölümlerini başarıyla kullandınız.

Özet

Bu ünitede hatırlamanız gereken birkaç önemli şey şunlardır:

  • RUN AND DEBUG görünümünün VARIABLES bölümünü kullanarak değişken durumunu izleyin.
  • ÇALıŞTıR VE HATA AYıKLAMA görünümünün WATCH bölümünü kullanarak bir ifadeyi zaman veya farklı yöntemler arasında izleyin.
  • Bir özel durumun veya WATCH ifadesinin kaynak konumunu bulmak için ÇALıŞTıR VE HATA AYıKLAMA görünümünün CALL STACK bölümünü kullanın.
  • Bir değişkenin çalışma zamanında atanan değerini değiştirmek için DEĞIŞKENLER bölümünü kullanın.