Öğretici: Visual Studio kullanarak C++ kodunda hata ayıklamayı öğrenin

Bu makalede, adım adım izlenecek yolda Visual Studio hata ayıklayıcısının özellikleri tanıtılmaktadır. Hata ayıklayıcı özelliklerinin daha üst düzey bir görünümünü istiyorsanız, bkz . İlk olarak hata ayıklayıcıya bakma. Uygulamanızda hata ayıkladığınızda, genellikle uygulamanızı hata ayıklayıcı ekli olarak çalıştırdığınız anlamına gelir. Bunu yaptığınızda, hata ayıklayıcısı kodunuzun çalışırken ne yaptığını görmek için birçok yol sağlar. Kodunuzda adım adım ilerleyebilir ve değişkenlerde depolanan değerlere bakabilir, değerlerin ne zaman değiştiğini görmek için değişkenler üzerinde izlemeler ayarlayabilir, kodunuzun yürütme yolunu inceleyebilir, bir kod dalının çalışıp çalışmadığını görebilir vb. Kodda ilk kez hata ayıklamayı denediyseniz, bu makaleye geçmeden önce mutlak yeni başlayanlar için hata ayıklamayı okumak isteyebilirsiniz.

Tanıtım uygulaması C++ olsa da, özelliklerin çoğu C#, Visual Basic, F#, Python, JavaScript ve Visual Studio tarafından desteklenen diğer diller için geçerlidir (F# Düzenleme ve devam etme özelliğini desteklemez. F# ve JavaScript OtomatikLer penceresini desteklemez). Ekran görüntüleri C++ dilindedir.

Bu öğreticide şunları yapacaksınız:

  • Hata ayıklayıcıyı başlatın ve kesme noktalarına basın.
  • Hata ayıklayıcıda kodda adım adım ilerleyecek komutları öğrenin
  • Veri ipuçlarında ve hata ayıklayıcı pencerelerinde değişkenleri inceleme
  • Çağrı yığınını inceleme

Önkoşullar

Visual Studio'yu ve C++ iş yüküyle Masaüstü geliştirmeyi yüklemiş olmanız gerekir.

Visual Studio'yu henüz yüklemediyseniz Visual Studio indirmeleri sayfasına giderek ücretsiz yükleyin.

Visual Studio 2022'yi henüz yüklemediyseniz Visual Studio 2022 indirmeleri sayfasına giderek ücretsiz yükleyin.

İş yükünü yüklemeniz gerekiyorsa ancak Visual Studio'nuz zaten varsa Araçlar>Araçları ve Özellikleri Al...'e gidin ve bu da Visual Studio Yükleyicisi açar. Visual Studio Yükleyicisi başlatılır. C++ iş yüküyle Masaüstü geliştirme'yi ve ardından Değiştir'i seçin.

Bir proje oluştur

İlk olarak bir C++ konsol uygulaması projesi oluşturacaksınız. Proje türü, herhangi bir şey eklemeden önce ihtiyacınız olan tüm şablon dosyalarıyla birlikte gelir!

  1. Visual Studio'yu açın.

    Başlangıç penceresi açık değilse Dosya>Başlangıç Penceresi'ni seçin.

  2. Başlangıç penceresinde Yeni proje oluştur'u seçin.

  3. Yeni proje oluştur penceresinde, arama kutusuna konsol girin veya yazın. Ardından, Dil listesinden C++ öğesini ve ardından Platform listesinden Windows'u seçin.

    Dil ve platform filtrelerini uyguladıktan sonra Konsol Uygulaması şablonunu ve ardından İleri'yi seçin.

    Screenshot of choosing the C++ template for the Console App.

    Screenshot of choosing the C++ template for the Console App.

    Dekont

    Konsol Uygulaması şablonunu görmüyorsanız, Yeni proje oluştur penceresinden yükleyebilirsiniz. Aradığınızı bulamıyor musunuz? iletisinde Daha fazla araç ve özellik yükle bağlantısını seçin. Ardından Visual Studio Yükleyicisi C++ iş yüküyle masaüstü geliştirme'yi seçin.

  4. Yeni projenizi yapılandırın penceresinde, Proje adı kutusuna get-started-debugging yazın veya girin. Ardından Oluştur'u seçin.

    Visual Studio yeni projenizi açar.

Uygulamayı oluşturma

  1. get-started-debugging.cpp dosyasında, varsayılan kodun tümünü aşağıdaki kodla değiştirin:

    #include <string>
    #include <vector>
    #include <iostream>
    
    void SendMessage(const std::wstring& name, int msg)
    {
        std::wcout << L"Hello, " << name << L"! Count to " << msg << std::endl;
    }
    
    int main()
    {
        std::vector<wchar_t> letters = { L'f', L'r', L'e', L'd', L' ', L's', L'm', L'i', L't', L'h' };
        std::wstring name = L"";
        std::vector<int> a(10);
        std::wstring key = L"";
    
        for (int i = 0; i < letters.size(); i++)
        {
            name += letters[i];
            a[i] = i + 1;
            SendMessage(name, a[i]);
        }
        std::wcin >> key;
        return 0;
    }
    

Hata ayıklayıcıyı başlatın!

  1. Hata Ayıklama Araç Çubuğu'nda F5 (Hata AyıklamaYı > Başlat Hata Ayıklama) veya Hata Ayıklamayı Başlat düğmesine Start Debugging basın.

    F5 , uygulamayı uygulama işlemine eklenmiş hata ayıklayıcıyla başlatır, ancak şu anda kodu incelemek için özel bir şey yapmadık. Böylece uygulama yüklenir ve konsol çıkışını görürsünüz.

    Hello, f! Count to 1
    Hello, fr! Count to 2
    Hello, fre! Count to 3
    Hello, fred! Count to 4
    Hello, fred ! Count to 5
    Hello, fred s! Count to 6
    Hello, fred sm! Count to 7
    Hello, fred smi! Count to 8
    Hello, fred smit! Count to 9
    Hello, fred smith! Count to 10
    

    Bu öğreticide, hata ayıklayıcısını kullanarak bu uygulamaya daha yakından göz atacak ve hata ayıklayıcı özelliklerine göz atacağız.

  2. Kırmızı durdurma Stop Debuggingdüğmesine (Shift + F5) basarak hata ayıklayıcıyı durdurun.

  3. Konsol penceresini kapatmak için konsol penceresinde bir tuşa ve Enter tuşuna basın.

Kesme noktası ayarlama ve hata ayıklayıcıyı başlatma

  1. İşlev döngüsünde formain , aşağıdaki kod satırının sol kenar boşluğuna tıklayarak bir kesme noktası ayarlayın:

    name += letters[i];

    Kesme noktasını ayarladığınız yerde kırmızı bir daire Breakpoint görüntülenir.

    Kesme noktaları, güvenilir hata ayıklamanın en temel ve temel özelliklerinden biridir. Kesme noktası, değişkenlerin değerlerine, bellek davranışına veya bir kod dalının çalıştırılıp çalıştırılmadığına bakabilmeniz için Visual Studio'nun çalışan kodunuzu nerede askıya alması gerektiğini gösterir.

  2. F5 tuşuna veya Hata AyıklamayıBaşlat düğmesine basınStart Debugging, uygulama başlatılır ve hata ayıklayıcı kesme noktasını ayarladığınız kod satırında çalışır.

    Screenshot of setting and hitting a breakpoint.

    Sarı ok, hata ayıklayıcının duraklatıldığı deyimi temsil eder ve aynı noktada uygulama yürütmeyi de askıya alır (bu deyim henüz yürütülmemiştir).

    Uygulama henüz çalışmıyorsa, F5 hata ayıklayıcıyı başlatır ve ilk kesme noktasında durur. Aksi takdirde, F5 uygulamayı sonraki kesme noktasına çalıştırmaya devam eder.

    Kesme noktaları, kod satırını veya kodun ayrıntılı olarak incelemek istediğiniz bölümünü bildiğinizde yararlı bir özelliktir. Koşullu kesme noktaları gibi ayarlayabileceğiniz farklı kesme noktası türleri hakkında bilgi için bkz . Kesme noktalarını kullanma.

Çoğunlukla burada klavye kısayollarını kullanırız çünkü uygulamanızı hata ayıklayıcıda yürütme konusunda hızlı bir yöntemdir (menü komutları gibi eşdeğer komutlar parantez içinde gösterilir).

  1. yöntemindeki döngüde duraklatılırken, yöntem çağrısına formain ilerlemek SendMessage için F11 tuşuna iki kez basın (veya Adım hatalarını ayıkla'yı > seçin).

    F11'e iki kez bastıktan sonra şu kod satırında olmanız gerekir:

    SendMessage(name, a[i]);

  2. Yöntemine geçmek için F11 tuşuna SendMessage bir kez daha basın.

    Sarı işaretçi yöntemine SendMessage ilerler.

    Screenshot of using F11 to Step Into code.

    F11, Adımla komutudur ve uygulama yürütme işlemini her seferinde bir deyimle ilerler. F11, yürütme akışını en ayrıntılı şekilde incelemenin iyi bir yoludur. (Kodda daha hızlı ilerlemek için size diğer bazı seçenekleri de gösteririz.) Varsayılan olarak, hata ayıklayıcısı kullanıcı dışı kodu atlar (daha fazla ayrıntı istiyorsanız bkz . Yalnızca Kodum).

    Yöntemini incelemeyi tamamladığınızdan SendMessage ve yöntemden çıkmak ancak hata ayıklayıcıda kalmak istediğinizi varsayalım. Bunu, Dışarı Adımla komutunu kullanarak yapabilirsiniz.

  3. Shift + F11 tuşuna basın (veya Hata Ayıklama > Adımı Dışarı).

    Bu komut, geçerli yöntem veya işlev dönene kadar uygulama yürütmeyi sürdürür (ve hata ayıklayıcıyı ilerletir).

    yönteminde döngüye formain geri dönmeniz, yöntem çağrısında SendMessage duraklatılmış olmanız gerekir.

  4. Yöntem çağrısına yeniden dönene kadar F11 tuşuna SendMessage birkaç kez basın.

  5. Yöntem çağrısında duraklatılırken F10 tuşuna bir kez basın (veya Hata Ayıkla Adım Üzerinde'yi >seçin).

    Screenshot of using F10 to Step Over code.

    Bu kez hata ayıklayıcının yöntemine SendMessage adım atmadığını fark edin. F10 , uygulama kodunuzdaki işlevlere veya yöntemlere adım atmadan hata ayıklayıcıyı ilerletir (kod yine de yürütülür). Yöntem çağrısında F10 tuşuna basarak (F11 yerine), uygulama SendMessage kodunu atladık (şu anda ilgilenmemiş olabiliriz).SendMessage Kodunuz arasında gezinmenin farklı yolları hakkında daha fazla bilgi için bkz . Hata ayıklayıcıda kodda gezinme.

  1. Kesme noktasına ilerlemek için F5 tuşuna basın.

  2. Kod düzenleyicisinde ekranı aşağı kaydırın ve sol tarafta yeşil Tıklamak için Çalıştır düğmesi Run to Click görünene kadar yöntemdeki işlevin SendMessage üzerine std::wcoutgelin. Düğmenin araç ipucunda "Yürütmeyi buradan çalıştır" gösterilir.

    Screenshot of using the Run to Click feature.

    Dekont

    Tıkla çalıştır düğmesi Visual Studio 2017'de yenidir. (Yeşil ok düğmesini görmüyorsanızHata ayıklayıcısını doğru yere ilerletmek için bu örnekteki F11 .)

  3. Tıklatılacak Çalıştır düğmesine Run to Clicktıklayın.

    Hata ayıklayıcı işlevine std::wcout ilerler.

    Bu düğmeyi kullanmak, geçici kesme noktası ayarlamaya benzer. Tıklayarak Çalıştır, uygulama kodunun görünür bir bölgesinde hızla gezinmek için kullanışlıdır (herhangi bir açık dosyaya tıklayabilirsiniz).

Uygulamanızı hızlı bir şekilde yeniden başlatın

Hata Ayıklama Araç Çubuğu'nda (Ctrl + Shift + F5) Yeniden BaşlatRestart App düğmesine tıklayın.

Yeniden Başlat'a bastığınızda, uygulama durdurulduğunda ve hata ayıklayıcı yeniden başlatıldığında zaman kazanır. Hata ayıklayıcı, kod yürütülerek isabet edilen ilk kesme noktasında duraklatılır.

Hata ayıklayıcı, döngü içinde daha önce ayarladığınız for kesme noktasında yeniden durur.

Veri ipuçlarıyla değişkenleri inceleme

Değişkenleri incelemenize olanak sağlayan özellikler, hata ayıklayıcının en kullanışlı özelliklerinden biridir ve bunu yapmanın farklı yolları vardır. Genellikle, bir sorunun hatalarını ayıklamaya çalıştığınızda, değişkenlerin belirli bir zamanda olmasını beklediğiniz değerleri depolayıp depolamadığını bulmaya çalışırsınız.

  1. deyimi üzerinde duraklatılırken değişkenin name += letters[i] üzerine gelin ve değişkenin letters varsayılan değeri size={10}olan öğesini görürsünüz.

  2. Değişkenin letters içerdiği tüm öğeleri içeren özelliklerini görmek için değişkeni genişletin.

  3. Ardından değişkenin üzerine gelin ve değişkenin name geçerli değerini boş bir dize olarak görürsünüz.

  4. Döngüde birkaç kez yinelemek için F5 (veya Hata Ayıklama>Devamı) tuşuna birkaç kez basın, kesme noktasında yeniden duraklatın ve değerini denetlemek için her seferinde değişkenin name üzerine gelin.for

    Screenshot of viewing a data tip.

    Değişkenin değeri döngünün her yinelemesiyle for değişir ve ardından , frfreve gibi değerlerini fgösterir.

    Genellikle hata ayıklarken, değişkenlerdeki özellik değerlerini denetlemek, depolamalarını beklediğiniz değerleri depolayıp depolamadıklarını görmek için hızlı bir yol istersiniz ve veri ipuçları bunu yapmak için iyi bir yoldur.

Otomatik Ve Yerel Ayarlar pencereleriyle değişkenleri inceleme

  1. Kod düzenleyicisinin en altındaki Otomatikler penceresine bakın.

    Kapalıysa, Windows>Otomatik Hata Ayıklama'yı>seçerek hata ayıklayıcıda duraklatılmış durumdayken açın.

    Otomatikler penceresinde değişkenleri ve geçerli değerlerini görürsünüz. OtomatikLer penceresi geçerli satırda veya önceki satırda kullanılan tüm değişkenleri gösterir (Dile özgü davranış için belgeleri denetleyin).

  2. Ardından, Otomatikler penceresinin yanındaki bir sekmedeki YerelLer penceresine bakın.

  3. değişkenini letters , içerdiği öğeleri gösterecek şekilde genişletin.

    Screenshot of inspecting variables in the Locals Window.

    Screenshot of inspecting variables in the Locals Window.

    Yerel Ayarlar penceresi, geçerli kapsamdaki değişkenleri, yani geçerli yürütme bağlamını gösterir.

Saat ayarlama

  1. Ana kod düzenleyicisi penceresinde değişkene name sağ tıklayın ve Gözcü Ekle'yi seçin.

    Kod düzenleyicisinin alt kısmında Gözcü penceresi açılır. İzleme penceresini, göz kulak olmak istediğiniz bir değişkeni (veya ifadeyi) belirtmek için kullanabilirsiniz.

    Artık değişkende name bir saat kümeniz var ve hata ayıklayıcıda ilerledikçe değerinin değiştiğini görebilirsiniz. Diğer değişken pencerelerinden farklı olarak, İzleme penceresi her zaman izlediğiniz değişkenleri gösterir (kapsam dışındayken gri görünür).

Çağrı yığınını inceleme

  1. Döngüde for duraklatılmış durumdayken, sağ alt bölmede varsayılan olarak açık olan Çağrı Yığını penceresine tıklayın.

    Kapalıysa, Windows>Çağrı Yığınında Hata Ayıkla'yı>seçerek hata ayıklayıcıda duraklatılmış durumdayken açın.

  2. Yöntemde hata ayıklayıcı duraklamasını görene kadar F11'e SendMessage birkaç kez tıklayın. Çağrı Yığını penceresine bakın.

    Screenshot of examining the call stack.

    Screenshot of examining the call stack.

    Çağrı Yığını penceresi, yöntemlerin ve işlevlerin çağrılma sırasını gösterir. Üst satırda geçerli işlev (bu uygulamadaki SendMessage yöntem) gösterilir. İkinci satır, yönteminden main çağrıldığını SendMessage vb. gösterir.

    Dekont

    Çağrı Yığını penceresi, Eclipse gibi bazı IDE'lerde Hata Ayıklama perspektifine benzer.

    Çağrı yığını, bir uygulamanın yürütme akışını incelemek ve anlamak için iyi bir yoldur.

    Bir kod satırına çift tıklayarak bu kaynak kodu inceleyebilir ve hata ayıklayıcı tarafından denetlenen geçerli kapsamı da değiştirebilirsiniz. Bu eylem hata ayıklayıcıyı ilerletmiyor.

    Diğer işlemleri yapmak için Çağrı Yığını penceresindeki sağ tıklama menülerini de kullanabilirsiniz. Örneğin, belirtilen işlevlere kesme noktaları ekleyebilir, İmleçte Çalıştır'ı kullanarak hata ayıklayıcıyı ilerletebilir ve kaynak kodu inceleyebilirsiniz. Daha fazla bilgi için bkz . Nasıl yapılır: Çağrı Yığınını İnceleme.

Yürütme akışını değiştirme

  1. İşlevi çalıştırmak için F11 tuşuna std::wcout iki kez basın.

  2. Hata ayıklayıcı yöntem çağrısında SendMessage duraklatılmış durumdaysa, fareyi kullanarak soldaki sarı oku (yürütme işaretçisi) yakalayın ve sarı oku bir satır yukarı, geri'ye std::wcouttaşıyın.

  3. F11 tuşuna basın.

    Hata ayıklayıcı işlevi yeniden çalıştırır std::wcout (bunu konsol penceresi çıkışında görürsünüz).

    Yürütme akışını değiştirerek farklı kod yürütme yollarını test etme veya hata ayıklayıcıyı yeniden başlatmadan kodu yeniden çalıştırma gibi işlemler yapabilirsiniz.

    Uyarı

    Genellikle bu özelliğe dikkat etmeniz gerekir ve araç ipucunda bir uyarı görürsünüz. Başka uyarılar da görebilirsiniz. İşaretçiyi taşımak uygulamanızı önceki bir uygulama durumuna geri döndüremez.

  4. Uygulamayı çalıştırmaya devam etmek için F5 tuşuna basın.

    Bu öğreticiyi tamamladıktan sonra tebrikler!

Sonraki adımlar

Bu öğreticide hata ayıklayıcıyı başlatmayı, kodda adım adım ilerleyip değişkenleri incelemeyi öğrendiniz. Daha fazla bilgi için bağlantılarla birlikte hata ayıklayıcısı özelliklerine üst düzey bir bakış elde etmek isteyebilirsiniz.