Aracılığıyla paylaş


Öğretici: Visual Studio ile C++ kodunda hata ayıklama

Bu makalede, adım adım izlenecek yolda Visual Studio hata ayıklayıcısının özellikleri tanıtılmaktadır. Bir uygulamada hata ayıklarken, uygulamanızı genellikle hata ayıklayıcı ekli olarak çalıştırırsınız. Hata ayıklayıcı, program yürütme sırasında kodunuzun ne yaptığını incelemek için birçok yol sağlar. Kodunuzda adım adım ilerleyebilir, değişkenlerde depolanan değerlere bakabilir ve değerlerin ne zaman değiştiğini görmek için değişkenler üzerinde izlemeler ayarlayabilirsiniz. Hata ayıklayıcı, kodunuzun yürütme yolunu incelemenize ve bir kod dalının çalıştığını onaylamanıza yardımcı olur.

Bu öğreticide:

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

Hata ayıklamaya yeni başladıysanız, bu öğreticiye başlamadan önce Yeni başlayanlar için Hata Ayıklama'ı okumak isteyebilirsiniz. Hata ayıklayıcısı özelliklerinin daha üst düzey bir görünümünü istiyorsanız bkz. Hata ayıklayıcıya ilk bakış.

Önkoşullar

  • Visual Studio 2022, C++ iş yükünün yüklü olduğu Desktop geliştirmesiyle sürüm 17.12 veya üzeri.

    • Visual Studio'nuz zaten varsa, iş yükünü Etkileşimli Geliştirme Ortamı'ndan (IDE) yükleyebilirsiniz:

      1. Araçları>Araçları ve Özellikleri Alöğesini seçin.

      2. Visual Studio Yükleyicisi'nde İş Yükleri sekmesini seçin.

      3. C++ iş yüküyle masaüstü geliştirme seçin ve ardından Değiştiröğesini seçin.

      4. İstemleri izleyin ve yüklemeyi tamamlayın.

  • Bu öğreticide bir C++ tanıtım uygulaması kullanılır ve ekran görüntüleri C++ söz dizimini gösterir. Belirtilen özelliklerin çoğu C#, Visual Basic, F#, Python, JavaScript ve Visual Studio tarafından desteklenen diğer diller için de geçerlidir. Göz önünde bulundurulması gereken birkaç sınırlama vardır:

    • F#: Düzenle ve devam et özelliği desteklenmez.

    • F# ve JavaScript: Araçlar penceresi desteklenmiyor.

Proje oluşturma

Visual Studio'da C++ konsol uygulaması projesi oluşturmak için bu adımları izleyin. Proje türü, hızlı bir şekilde başlamak için ihtiyacınız olan tüm şablon dosyalarını sağlar:

  1. Visual Studio Başlangıç penceresinde (DosyaBaşlangıç Penceresi), yeni proje oluşturseçin:

    Visual Studio Başlangıç penceresinde Yeni proje oluştur seçeneğinin nasıl seçildiğini gösteren ekran görüntüsü.

  2. Dil filtresini C++ ve Platform filtresini Windowsolarak ayarlayın.

  3. Arama kutusunakonsol girin ve sonuç listesinden Konsol Uygulaması şablonunu seçin:

    Visual Studio 2022 Başlangıç penceresinde Konsol Uygulaması şablonunun nasıl arandığını ve seçildiğini gösteren ekran görüntüsü.

    Visual Studio Başlangıç penceresinde Konsol Uygulaması şablonunun nasıl arandığını ve seçildiğini gösteren ekran görüntüsü.

    Not

    Konsol Uygulaması şablonunu görmüyorsanız, Yeni proje oluştur penceresinden yükleyebilirsiniz. Önce arama sonuçlarını takip eden Aradığınızı bulamıyor musunuz? bölümünü bulun ve ardından Daha fazla araç ve özellik yükleöğesini seçin. Visual Studio Yükleyicisi'nde C++ ile masaüstü geliştirme iş yükünü seçin ve yüklemenizi güncelleştirin. Daha fazla bilgi için Önkoşullar bölümüne bakın.

  4. Yapılandırma sayfasına devam etmek için Sonraki seçin.

  5. yeni uygulamanız için Proje adı ve Çözüm adı olarak get-started-debugging girin. Varsayılan Konum'u seçin veya ortamınızda farklı bir yola göz atın.

  6. Yeni Node.js projesini oluşturmak için oluştur'u seçin.

Visual Studio yeni projenizi oluşturur ve Çözüm Gezginiproje hiyerarşinizi açar. get-started-debugging.cpp dosyası kod düzenleyicisinde açıktır.

Uygulamayı oluşturma

Kod düzenleyicisinde get-started-debugging.cpp dosyasını düzenleyerek projeniz için yeni bir uygulama oluşturun.

Şablon tarafından sağlanan varsayılan içeriği 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şlatma

Artık güncelleştirilmiş kodunuzda hata ayıklamaya başlamaya hazırsınız:

  1. hata ayıklama oturumunu başlatmak için F5 veya Hata Ayıklama > Hata Ayıklamayı Başlatseçeneğini belirleyin. Hata Ayıklama araç çubuğunda Hata Ayıklamayı Başlat (düz yeşil ok simgesi) seçeneğini de seçebilirsiniz.

    F5 klavye kısayolu, uygulamayı uygulama işlemine eklenmiş hata ayıklayıcıyla başlatır, ancak kodda incelemek için henüz özel bir şey yoktur. Uygulama basitçe 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
    

    Öğreticinin ilerleyen bölümlerinde hata ayıklayıcıda bu uygulamaya daha yakından bakar ve diğer hata ayıklama özelliklerini keşfedersiniz.

  2. Hata ayıklama araç çubuğunda (kırmızı kare simgesi) Durdur'u seçerek hata ayıklayıcıyı durdurun. Shift + F5 klavye kısayolunu da kullanabilirsiniz.

  3. Çalışan uygulamanın konsol penceresinde herhangi bir anahtarı seçin ve ardından Enter'ı seçerek pencereyi kapatın.

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

Hata ayıklayıcısının seçili noktasında kesme noktası ayarlamayı ve duraklatmayı deneyin:

  1. Kod düzenleyicisinde get-started-debugging.cpp dosyasına dönün ve main işlevinin for döngüsünü bulun:

       for (int i = 0; i < letters.size(); i++)
       {
          name += letters[i];
          a[i] = i + 1;
          SendMessage(name, a[i]);
       }
    
  2. name += letters[i]; kod ifadesini içeren satırda, satırın sol kenar boşluğunu seçerek bir kesme noktası oluşturun. Visual Studio, belirlenen kesme noktasını göstermek için kenar boşluğuna kodunda kırmızı bir daire ekler.

    Bahşiş

    ayrıca imlecinizi bir kod satırına yerleştirip F9 seçerek bu satırın kesme noktasını değiştirebilirsiniz.

    Kesme noktaları, güvenilir hata ayıklamanın en temel ve temel özelliklerinden biridir. Kesme noktası, Visual Studio'nun çalışan kodunuzu nerede askıya almasını istediğinizi gösterir. Yürütme duraklatıldığında değişkenlerin değerlerine göz atabilir, belleğin davranışını inceleyebilir veya bir kod dalının çalıştırılıp çalıştırılamadığını kontrol edebilirsiniz.

  3. F5'i seçerek veya Hata Ayıklamayı Başlatuygulamanızı hata ayıklayıcıda başlatın.

    Visual Studio uygulamanızın yürütülmesini başlatır. Hata ayıklayıcı ayarlanan kesme noktanıza ulaştığında, hata ayıklama işlemi duraklatılır.

    Visual Studio, hata ayıklayıcının durakladığı kod satırını göstermek için düzenleme alanı kenarındaki kırmızı hata ayıklama noktası dairesine sarı bir ok ekler. Program yürütme duraklatıldı ve belirtilen deyim işlenmeyi bekliyor.

    Visual Studio'da ayarlanmış kesme noktasında duraklatılan hata ayıklayıcıyı gösteren ekran görüntüsü.

    Not

    F5 eylemi, uygulamanızın geçerli yürütme durumuna göre değişir. Uygulamanız çalışmıyorsa ve F5seçerseniz, hata ayıklayıcı uygulamanızı başlatır ve ilk ayarlanan kesme noktasına ulaşana kadar yürütmeye devam eder. Bu davranış, Hata Ayıklama>Hata Ayıklamayı Başlat komutuna karşılık gelir. Uygulamanız zaten çalışıyorsa veF5'i seçerseniz, hata ayıklayıcı bir sonraki kesme noktasına veya programın sonuna ulaşana kadar uygulama yürütme devam eder. Bu davranış, Hata Ayıklama>Devam komutuna eşleştirilir.

Kesme noktaları, ayrıntılı olarak incelemek istediğiniz kod satırını veya kod 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. Doğru kesme noktası türünü kullanma.

Debugger'da kodunuzda adım adım ilerleyin

Hata ayıklayıcıda kodunuzda gezinmenin kullanışlı bir yoluadım komutlarını kullanmaktır. Bu komutlar, bir kod bölümüne Adımla, üzerinden Adımla ve dışına Adımla'yı ve ayrıca uygulama yürütmede geri adım atmayı sağlar.

Hata ayıklayıcı araç çubuğundaki adım komutlarını gösteren ekran görüntüsü.

Aşağıdaki yordamda, kodunuzda hızla çalışmak için adım komutlarla klavye kısayollarının nasıl kullanılacağı vurgulanır. (Eşdeğer menü eylemleri parantez içinde gösterilir.)

  1. Uygulamanızı hata ayıklayıcıda başlatmak için F5 veya Hata Ayıklamayı Başlatseçeneklerinden birini seçin.

  2. Hata ayıklayıcı işlevindeki döngüsünde duraklatılırken, yöntem çağrısına ilerlemek için iki kez F11 (Hata Ayıklama Adımla) seçeneğini belirleyin.

    F11 iki kez seçtikten sonra yürütme, SendMessage(name, a[i]);kod deyimine devam eder.

  3. SendMessage yöntemine geçmek için F11 yeniden seçin.

    Sarı işaretçinin SendMessage yöntemine ilerlediğini fark edin:

    Hata ayıklayıcının SendMessage yöntemine girdiğini ve duraklatma konumunu gösteren sarı işaretçiyi gösteren ekran görüntüsü.

    F11 klavye kısayolu, uygulama yürütmeyi her seferinde bir ifade ilerleten Step Into komutunu başlatır. Yürütme akışını en ayrıntılı şekilde incelemenin iyi bir yoludur. Varsayılan olarak, hata ayıklayıcısı kullanıcı olmayan kodu atlar. Daha fazla bilgi için bkz. Just My Code. Öğreticinin ilerleyen bölümlerinde kodunuzda daha hızlı ilerlemenin yollarını öğreneceksiniz.

  4. SendMessage yöntemini inceledikten sonra Step Out komutuyla hata ayıklamaya devam edebilirsiniz. Shift + F11 (hata ayıklama > Adım Dışı) seçeneğini belirleyin.

    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).

    Komut tamamlandığında, hata ayıklayıcı SendMessage yöntemi çağrısında main yönteminin for döngüsünde duraklatılır.

  5. yöntem çağrısına yeniden dönene kadar F11 birkaç kez seçin.

  6. Hata ayıklayıcı yöntem çağrısında duraklatıldığında F10 tuşlarına (hata ayıklama > Adımı Atla) basın.

    Hata ayıklayıcının SendMessage yöntemi üzerinden ilerlediğini ve duraklatma konumunu gösteren sarı işaretçiyi gösteren ekran görüntüsü.

    Bu kez hata ayıklayıcının SendMessage yöntemine adım atmadığını fark edin. F10 kısayolu, uygulama kodunuzdaki işlevlere veya yöntemlere adım atmadan hata ayıklayıcıyı ilerletir (kod yürütülür). yöntem çağrısında F10 seçtiğinizde (F11yerine), uygulama kodunu Üzerine Adımla . Bu yaklaşım, şu anda incelemeniz gerekmeyen kodun üzerinden geçmek için kullanışlıdır. Kodunuz arasında gezinmenin farklı yolları hakkında daha fazla bilgi için bkz.hata ayıklayıcıda kodda gezinme .

Kodunuzda gezinmek için Run to Click kullanın

Debugger'da kodunuzun üzerinden geçmenin bir diğer yolu Tıklamalı Çalıştır özelliğidir. Bu eylem, geçici kesme noktası ayarlamaya benzer.

Hata ayıklama oturumunuzla devam edin:

  1. Kodunuzda kesme noktasına ilerlemek için F5 seçin.

  2. Kod düzenleyicisinde, SendMessage yöntemi tanımına kaydırın ve std::wcout işlevinin üzerine gelin.

    Kod deyiminin sol tarafında Tıkla Çalıştır (yeşil ok simgesi) görünene kadar bekleyin. Simgenin üzerine gelirseniz "Yürütmeyi buraya çalıştır" araç ipucuyla karşılaşırsınız:

    Hata ayıklayıcıdaki Tıkla ve Çalıştır özelliğinin ve eylem araç ipucunun gösterildiği ekran görüntüsü.

  3. Çalıştır'ı seçerek tıklayın.

    Hata ayıklayıcı, yürütmeyi belirtilen noktaya getirir. Bu örnekte hata ayıklayıcı, std::wcout işlevi çağrısına ulaşır.

Tıkla Çalıştır eylemi, uygulama kodunun görünür bir bölgesinde hızla gezinmek için kullanışlıdır. Bu özelliği kod düzenleyicisinde açık olan herhangi bir dosyada kullanabilirsiniz.

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

Uygulamanızı hızla başlatmak için Hata Ayıklama Araç Çubuğu'ndaki Yeniden Başlat (döngüsel ok simgesi) seçeneğini seçin. Ayrıca hata ayıklama yeniden başlatma seçebilir veya CtrlShiftF5 klavye kısayolunu kullanabilirsiniz.

Yeniden Başlatma özelliği, uygulamayı durdurup hata ayıklayıcıyı yeniden başlatmaktan daha verimlidir.

Yeniden Başlatseçtiğinizde, hata ayıklayıcı yürütme sırasında karşılaştığı ilk kesme noktasında duraklatılır. Bu örnekte hata ayıklayıcı, for döngüsünün içinde ayarladığınız kesme noktasında yeniden durur.

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

Değişkenleri incelemenize yardımcı olan özellikler, hata ayıklayıcıyla çalışmanın en kullanışlı avantajlarından biridir. Genellikle bir sorunda hata ayıklarken değişkenlerin belirli zamanlarda beklenen değerleri depolayıp depolamadığını keşfetmeye çalışırsınız. Visual Studio, bu görevi tamamlamanıza yardımcı olmak için çeşitli yollar sağlar.

Hata ayıklama oturumunuzla devam edin:

  1. Hata ayıklayıcı name += letters[i] deyiminde durakladığında, letters değişkeninin üzerine gelin. Değişken adının sol kısmındaki genişlet/daralt okunu seçin ve açılır menüden özelliklerini görüntüleyin.

    veri ipuçları özelliği, değişkenin içerdiği tüm öğeleri gösterir. Varsayılan değer olan size={10}'a dikkat edin.

    Hata ayıklayıcıdaki bir değişkenin özelliklerini ve değerlerini incelemeyi gösteren animasyon.

  2. Ardından, name değişkeninin üzerine gelin ve geçerli değeri olan boş bir dizeye ("") dikkat edin.

  3. F5 (Hata Ayıklama>Devam) birkaç kez seçerek for döngüsünde birkaç kez yineleyin. Hata ayıklayıcı kesme noktasında her durduğunda, name değişkeninin üzerine gelin ve mevcut değeri kontrol edin.

    Hata ayıklayıcıda veri ipucunu göstermek için fareyi kullanarak değişkenin değerini denetlemeyi gösteren ekran görüntüsü.

    Değişkenin değeri, for döngüsünün her yinelemesiyle değişir ve fdeğerlerini gösterir, sonra fr, sonra frevb.

Otomatik Ve Yerel Ayarlar pencereleriyle değişkenleri inceleme

Değişkenleri ve değerleri incelemeye yönelik bir diğer yaklaşım da Otomatikler ve Locals pencerelerini kullanmaktır. Varsayılan olarak, siz uygulamanızda hata ayıklarken bu pencereler Visual Studio IDE'deki kod düzenleyicisinin altında görünür:

Hata ayıklama oturumu sırasında hata ayıklayıcıdaki kod düzenleyicisinin altındaki Otomatikler ve YerelLer pencerelerini gösteren ekran görüntüsü.

  1. Kod düzenleyicisinin altındaki Autos penceresine dikkat edin.

    Hata ayıklama oturumunuz sırasında pencereyi görmüyorsanız, pencereyi açmak için WindowsOtomatiklerHata Ayıkla'yı seçin.

    otomatik penceresi, geçerli satırda veya önceki satırda kullanılan tüm değişkenleri ve bunların geçerli değerlerini gösterir. Belirli programlama dillerinin değişkenler ve özellikler için benzersiz davranışlar gösterebileceğini unutmayın. Daha fazla bilgi için bkz. Visual Studio Dil Kılavuzu.

  2. Ardından Locals penceresine göz atın. Varsayılan olarak, bu pencere Otomatikler penceresinin yanına hizalanır.

    Hata ayıklama oturumunuz sırasında pencereyi görmüyorsanız, pencereyi açmak için Hata Ayıkla>Windows> Yereller'i seçin.

  3. Locals penceresinde, içerdiği öğeleri göstermek için letters değişkenini genişletin.

    Visual Studio 2022'de Yereller penceresinde değişkenlerin ve değerlerin nasıl incelendiğini gösteren ekran görüntüsü.

    Visual Studio'daki YerelLer penceresinde değişkenlerin ve değerlerin nasıl incelendiğini gösteren ekran görüntüsü.

    Locals penceresi, geçerli kapsamındaki değişkenleriyani geçerli yürütme bağlamını gösterir.

Bir değişkeni izle

Belirli bir değişkenin davranışını izlemek istiyorsanız, birizleme ayarlayabilirsiniz:

Kod düzenleyicisinde name değişkenine sağ tıklayın ve İzleme Ekle'yi seçin. Watch penceresi, kod düzenleyicisinin altında açılır. İzlemek istediğiniz değişkeni (veya ifadeyi) belirtmek için watch penceresi kullanabilirsiniz.

Visual Studio'da ad değişkeninin değerlerini gösteren İzleme penceresini gösteren ekran görüntüsü.

Hata ayıklayıcıda uygulama yürütme sırasında name değişkenini izlerken değer değişikliğini görebilirsiniz. Diğer değişken pencerelerinden farklı olarak, İzle penceresi her zaman izlediğiniz değişkenleri gösterir. İzlenen bir değişken kapsam içinde olmadığında, değişken adı soluklaştırılır.

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

Visual Studio'daki Çağrı Yığını penceresi, yöntemlerin ve işlevlerin çağrılma sırasını gösterir. Bu pencere, Eclipse gibi bazı IDE'lerde Hata Ayıklama perspektifine benzer. Varsayılan olarak, kod düzenleyicisinin altındaki hata ayıklama oturumu sırasında sağ alt bölmede çağrı yığını görünür.

  1. Hata ayıklayıcı for döngüsünde duraklatıldığında, mevcut çağrı yapısını görmek için Çağrı Yığını penceresini seçin.

    Hata ayıklama oturumunuz sırasında pencereyi görmüyorsanız pencereyi açmak için hata ayıklama>Pencereler>Çağrı Yığını seçeneklerini seçin.

  2. hata ayıklayıcının SendMessage yönteminde duraklatılmış olduğunu görene kadar birkaç kez F11 (Hata Ayıkla>Adımla) seçeneğini belirleyin.

  3. Çağrı Yığını penceresine tekrar bakın.

    Visual Studio 2022'de çağrı yığınının nasıl incelendiğini gösteren ekran görüntüsü.

    Visual Studio'da çağrı yığınının nasıl incelendiğini gösteren ekran görüntüsü.

    Çağrı Yığını penceresinde, en üst satır mevcut işlevi (bu uygulamadaki SendMessage metodu) gösterir. İkinci satırda, SendMessage yönteminin main yönteminden çağrıldığı vb. gösterilir.

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

  • Kaynak koda göz atmak için bir kod satırına çift tıklayın. Bu eylem, hata ayıklayıcının denetlediği geçerli kapsamı değiştirir, ancak hata ayıklayıcıyı ilerletmez.

  • Çağrı Yığını penceresinde programlama öğeleri için sağ tıklama menülerine erişin. Örneğin, belirtilen işlevlere kesme noktaları ekleyebilir, İmleçÇalıştır'ı kullanarak hata ayıklayıcıyı ilerletebilir ve kaynak koduna göz atabilirsiniz. Daha fazla bilgi için bkz. Çağrı yığınını görüntüleme vehata ayıklayıcıdaki Çağrı Yığını penceresini kullanma.

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

Visual Studio'da hata ayıklayıcının bir diğer özelliği de uygulamanızın yürütme akışını değiştirebilme özelliğidir:

  1. std::wcout işlevini çalıştırmak için F11 (Hata Ayıklama>İçine Gir) öğesini iki kez seçin.

  2. Hata ayıklayıcı SendMessage yöntem çağrısında duraklatıldığında, değişkenin solundaki sarı oku (yürütme işaretçisi) seçip sürükleyin ve oku önceki kod ifadesine, std::wcout, taşıyın.

  3. F11 yeniden seçin.

    Hata ayıklayıcı std::wcout işlevini yeniden çalıştırır. Terminal çıkışında işlemi izleyebilirsiniz.

    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.

    Dikkat

    Bu özellik ile çalışırken dikkatli olun. Sarı oku seçtiğinizde, Visual Studio araç ipucunda yürütme değişikliğinin istenmeyen sonuçlara yol açabileceğini belirten bir uyarı görüntüler. Senaryonuza bağlı olarak başka uyarılar da görebilirsiniz. İşaretçiyi hareket ettirerek uygulamanızı önceki bir uygulama durumuna geri döndüremezsiniz.

  4. Uygulama yürütmeyi tamamlamak için F5 seçin.