Kurz: Ladění kódu C++ pomocí sady Visual Studio

Tento článek představuje funkce ladicího programu sady Visual Studio v podrobném návodu. Při ladění aplikace obvykle spustíte aplikaci s připojeným ladicím programem. Ladicí program nabízí mnoho způsobů, jak prozkoumat, co váš kód dělá během provádění programu. Můžete procházet kód a podívat se na hodnoty uložené v proměnných a nastavit hodinky na proměnných, abyste viděli, kdy se hodnoty mění. Ladicí program vám pomůže prozkoumat proces provádění kódu a ověřit, zda se větev kódu skutečně spouští.

V tomto kurzu:

  • Spustit ladicí program a pozastavit na bodech přerušení
  • Naučte se příkazy pro krokování kódu v ladicím programu.
  • Kontrola proměnných v datových tipech a oknech ladicího programu
  • Prozkoumejte zásobník volání

Pokud s laděním teprve začínáte, můžete si před zahájením tohoto tutoriálu přečíst Ladění pro naprosté začátečníky. Pokud chcete zobrazit funkce ladicího programu na vyšší úrovni, podívejte se na Nejprve se podívejte na ladicí program.

Požadavky

  • Visual Studio 2022 verze 17.12 nebo novější s nainstalovanou úlohou Vývoj desktopu s C++.

    • Pokud už sadu Visual Studio máte, můžete ji nainstalovat z prostředí IDE (Interactive Development Environment):

      1. Vyberte Nástroje>Vybrat nástroje a funkce.

      2. V instalačním programu sady Visual Studio vyberte kartu Úlohy.

      3. Vyberte Vývoj desktopových aplikací pomocí úlohy C++ a pak vyberte Upravit.

      4. Postupujte podle pokynů a dokončete instalaci.

  • Tento kurz používá ukázkovou aplikaci jazyka C++ a snímky obrazovky znázorňují syntaxi jazyka C++. Většina ukázek funkcí se vztahuje také na jazyky C#, Visual Basic, F#, Python, JavaScript a další jazyky podporované sadou Visual Studio. Mějte na paměti několik omezení:

    • jazyka F#: Funkce upravit a pokračovat není podporovaná.

    • F# a JavaScript: Okno aut není podporováno.

Vytvoření projektu

Pomocí těchto kroků vytvořte projekt konzolové aplikace C++ v sadě Visual Studio. Typ projektu poskytuje všechny soubory šablon, které potřebujete, abyste mohli rychle začít:

  1. V okně Start sady Visual Studio (Soubor>Úvodní okno) vyberte Vytvořit nový projekt:

    Snímek obrazovky, který ukazuje, jak vybrat možnost Vytvořit nový projekt v okně Start sady Visual Studio

  2. Nastavte filtr jazyka na jazyka C++ jazyka C++ a nastavte filtr platformy na Windows.

  3. Do pole Hledat zadejte konzolea v seznamu výsledků vyberte šablonu konzolové aplikace.

    snímek obrazovky, který ukazuje, jak vyhledat a vybrat šablonu konzolové aplikace v okně Start sady Visual Studio 2022.

    snímek obrazovky, který ukazuje, jak vyhledat a vybrat šablonu konzolové aplikace v okně Start sady Visual Studio

    Poznámka

    Pokud šablonu konzolové aplikace nevidíte, můžete ji nainstalovat z okna Vytvořit nový projekt. Vyhledejte Nemůžete najít, co hledáte? oddíl, který následuje za výsledky hledání, a vyberte Nainstalovat další nástroje a funkce. V instalačním programu sady Visual Studio vyberte pracovní zátěž Vývoj pro stolní počítače s použitím C++ a aktualizujte svou instalaci. Další informace najdete v části Požadavky.

  4. Pokud chcete pokračovat na konfigurační stránku, vyberte Další.

  5. Zadejte get-started-debugging jako název projektu a název řešení pro vaši novou aplikaci. Zvolte výchozí umístění nebo přejděte k jiné cestě ve vašem prostředí.

  6. Vyberte Vytvořit a vytvořte nový projekt Node.js.

Visual Studio vytvoří nový projekt a otevře hierarchii projektu v průzkumníku řešení . Soubor get-started-debugging.cpp je otevřen v editoru kódu.

Vytvoření aplikace

Vytvořte pro svůj projekt novou aplikaci úpravou souboru get-started-debugging.cpp v editoru kódu.

Nahraďte výchozí obsah poskytnutý šablonou následujícím kódem:

#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;
}

Spuštění ladicího programu

Teď jste připraveni začít ladit aktualizovaný kód:

  1. Spusťte ladicí relaci tak, že vyberete F5 nebo Ladění > Spustit ladění. Můžete také vybrat Spustit ladění (ikona plné zelené šipky) na panelu nástrojů ladění.

    Klávesová zkratka F5 spustí aplikaci s ladicím programem připojeným k procesu aplikace, ale zatím nemáte nic speciálního k prozkoumání v kódu. Aplikace se jednoduše načte a zobrazí se výstup konzoly:

    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
    

    Později v tomto kurzu se podrobněji podíváte na tuto aplikaci v ladicím programu a prozkoumáte další funkce ladění.

  2. Ladicí program zastavíte tak, že na panelu nástrojů Ladění vyberete Zastavit (červená ikona čtvereku). Můžete také použít klávesovou zkratku Shift + F5.

  3. V okně konzoly pro spuštěnou aplikaci stiskněte libovolnou klávesu a potom stiskněte Enter pro zavření okna.

Nastavení zarážky a spuštění ladicího programu

Zkuste nastavit zarážku a pozastavení ve vybraném bodě v ladicím programu:

  1. Vraťte se do souboru get-started-debugging.cpp v editoru kódu a vyhledejte smyčku for funkce main:

       for (int i = 0; i < letters.size(); i++)
       {
          name += letters[i];
          a[i] = i + 1;
          SendMessage(name, a[i]);
       }
    
  2. Nastavte bod přerušení na řádce obsahující příkaz kódu name += letters[i]; výběrem v levém okraji řádky. Visual Studio přidá do okraje červený kruh , který označuje nastavený bod přerušení.

    Spropitné

    Také můžete umístit kurzor na řádek kódu a vybrat F9 a přepnout zarážku pro daný řádek.

    Body přerušení jsou jednou z nejzákladnějších a nejzásadnějších funkcí spolehlivého ladění. Zarážka označuje, kde má Visual Studio pozastavit spuštěný kód. Když je spuštění pozastavené, můžete se podívat na hodnoty proměnných, prozkoumat chování paměti nebo zkontrolovat, jestli se spouští větev kódu.

  3. Spusťte aplikaci v režimu ladění tak, že vyberete F5 nebo Spustit ladění.

    Visual Studio spustí spuštění vaší aplikace. Když ladicí program dosáhne nastaveného bodu přerušení, proces ladění se zastaví.

    Visual Studio přidá žlutou šipku do červeného zarážkového kolečka v okraji, aby představuje řádek kódu, ve kterém je ladicí program pozastavený. Spuštění programu je pozastaveno a uvedený příkaz čeká na zpracování.

    Snímek obrazovky, který zobrazuje ladicí program pozastavený na nastavené zarážce ve Visual Studio

    Poznámka

    Akce F5 je relativní vzhledem k aktuálnímu stavu spuštění aplikace. Pokud vaše aplikace není spuštěná a vyberete F5, ladicí program spustí aplikaci a pokračuje v provádění, dokud nedosáhne první nastavené zarážky. Toto chování odpovídá příkazu Ladění>Spustit ladění. Pokud už je vaše aplikace spuštěná a vyberete F5, provádění aplikace pokračuje, dokud ladicí program nedosáhne další zarážky nebo konce programu. Toto chování se mapuje na příkaz Ladění>Pokračovat.

Zarážky jsou užitečnou funkcí, když znáte řádek kódu nebo oddíl kódu, který chcete podrobně prozkoumat. Informace o různých typech zarážek, které můžete nastavit, například podmíněné zarážky, najdete v tématu Použití správného typu zarážky.

Procházejte svůj kód v ladicím programu

Pohodlný způsob, jak procházet kód v ladicím programu, je použít příkazy pro krokování . Tyto příkazy umožňují vstoupit, překročita opustit sekci kódu a také krokovat zpět během provádění aplikace.

Snímek obrazovky znázorňující příkazy kroku na panelu nástrojů ladicího programu

Následující postup ukazuje, jak pomocí klávesových zkratek s příkazy kroku rychle pracovat s kódem. (Ekvivalentní akce nabídky se zobrazují v závorkách.)

  1. Spusťte aplikaci v režimu ladění tak, že vyberete F5 nebo Spustit ladění.

  2. Zatímco ladicí program je pozastavený ve smyčce for ve funkci main, vyberte F11 (Ladit > Krok do) dvakrát přejít na volání metody SendMessage.

    Jakmile dvakrát vyberete F11, provádění bude pokračovat příkazem kódu SendMessage(name, a[i]);.

  3. Dalším krokem do metody vyberte SendMessage.

    Všimněte si, že žlutý ukazatel přejde do metody SendMessage:

    Snímek obrazovky znázorňující, jak ladicí program přejde do metody SendMessage a žlutý ukazatel označuje místo pozastavení.

    Klávesová zkratka F11 iniciuje příkaz Krok do, který postoupí spuštění aplikace po jednom příkazu. Je to dobrý způsob, jak prozkoumat tok provádění ve většině podrobností. Ve výchozím nastavení ladicí program přeskočí neuživatelský kód. Další informace naleznete v tématu Just My Code. Později v tomto kurzu se naučíte, jak se v kódu pohybovat rychleji.

  4. Po prozkoumání metody SendMessage můžete pokračovat v ladění pomocí příkazu Step Out. Vyberte Shift + F11 (> Krokovat).

    Tento příkaz obnoví provádění aplikace (a posune ladicí program), dokud se nevrátí aktuální metoda nebo funkce.

    Po dokončení příkazu se ladicí program pozastaví ve smyčce for metody main u volání metody SendMessage.

  5. Opakovaně vyberte F11, dokud se znovu nevrátíte do volání metody SendMessage.

  6. Zatímco ladicí program je pozastaven při volání metody, vyberte F10 (Ladění > Krok přes).

    Snímek obrazovky, který ukazuje, jak ladicí program přešel přes metodu SendMessage, a žlutý ukazatel, který označuje místo pozastavení.

    Všimněte si, že ladicí program tentokrát nezakročí do metody SendMessage. Klávesová zkratka F10 posune ladicí program vpřed, aniž by vstoupila do funkcí nebo metod v kódu vaší aplikace (kód se přesto stále provádí). Když vyberete F10 volání metody SendMessage (místo F11), vy přeskočíte kód implementace pro SendMessage. Tento přístup je užitečný k překročení kódu, který momentálně nepotřebujete kontrolovat. Další informace o různých způsobech procházení kódu najdete v tématu Procházení kódu v ladicím programu.

Procházení kódu pomocí příkazu Spustit a kliknutím

Dalším způsobem, jak pracovat s kódem v ladicím programu, je funkce Spustit a kliknout na. Tato akce se podobá nastavení dočasné zarážky.

Pokračujte v ladicí relaci:

  1. Zvolte F5, abyste přešli na zarážku ve vašem kódu.

  2. V editoru kódu se posuňte k definici SendMessage metody a najeďte myší na funkci std::wcout.

    Najeďte kurzorem, dokud se nalevo od příkazu kódu neobjeví Spustit ke kliknutí (ikona zelené šipky). Pokud najedete myší na ikonu, zobrazí se popis "Spustit až sem".

    snímek obrazovky s funkcí Spustit kliknutím a popisem akce v ladicím programu

  3. Vyberte Spustit a klikněte na .

    Ladicí program provede spuštění až na uvedenou pozici. V tomto příkladu ladicí program dosáhne volání funkce std::wcout.

Akce Spustit a kliknout je užitečná pro rychlé pohybování v rámci viditelné oblasti kódu aplikace. Tuto funkci můžete použít v libovolném souboru otevřeném v editoru kódu.

Rychlé restartování aplikace

Aplikaci můžete rychle restartovat tak, že na panelu nástrojů ladění vyberete Restartovat (ikona kruhové šipky). Můžete také vybrat Ladit > Restartovat nebo použít klávesovou zkratku Ctrl + Shift + F5.

Funkce Restart je efektivnější než zastavení aplikace a opakované spuštění ladicího programu.

Když vyberete Restartovat, ladicí program se pozastaví na první zarážce, ke které dojde během provádění. V tomto příkladu se ladicí program opět zastaví na zarážce, kterou jste nastavili uvnitř smyčky označené jako for.

Prozkoumejte proměnné pomocí datových tipů

Funkce, které pomáhají zkoumat proměnné, patří k nejužitečnějším výhodám práce s ladicím programem. Při ladění problému se často pokoušíte zjistit, jestli proměnné ukládají očekávané hodnoty v určitých časech. Visual Studio nabízí několik způsobů, jak vám s dokončením této úlohy pomůže.

Pokračujte v ladicí relaci:

  1. Zatímco ladicí program je pozastavený na příkazu name += letters[i], najeďte myší na proměnnou letters. Vyberte šipku pro rozbalení/sbalení vlevo od názvu proměnné a zobrazte její vlastnosti v rozbalovací nabídce.

    Funkce datových tipů zobrazuje všechny prvky, které proměnná obsahuje. Všimněte si výchozí hodnoty size={10}:

    Animace ukazující kontrolu vlastností a hodnot proměnné v ladicím programu.

  2. Dále najeďte myší na proměnnou name a všimněte si její aktuální hodnoty, prázdný řetězec ("").

  3. Několikrát vyberte F5 (Ladit>Pokračovat) a několikrát iterujte smyčkou for. Pokaždé, když se ladicí program zastaví na zarážce, najeďte myší na proměnnou name a zkontrolujte její aktuální hodnotu.

    Snímek obrazovky, který ukazuje, jak zkontrolovat hodnotu proměnné použitím najetí myší k zobrazení datového tipu v ladicím nástroji.

    Hodnota proměnné se změní s každou iterací smyčky for, která zobrazuje hodnoty f, pak fr, pak freatd.

Prohlížení proměnných pomocí oken Autos a Locals

Dalším přístupem ke kontrole proměnných a hodnot je použití oken Autos a Locals. Ve výchozím nastavení se tato okna zobrazí pod editorem kódu v integrovaném vývojovém prostředí sady Visual Studio při ladění aplikace:

Snímek obrazovky, který zobrazuje okna Autos a Locals pod editorem kódu v ladicím programu během relace ladění.

  1. Všimněte si okna Autos pod editorem kódu.

    Pokud okno během relace ladění nevidíte, výběrem možnosti Ladit>Windows>Automatické otevřete okno.

    Okno Automatické zobrazuje všechny proměnné použité na aktuálním řádku nebo na předchozím řádku spolu s aktuální hodnotou. Mějte na paměti, že konkrétní programovací jazyky mohou demonstrovat jedinečné chování proměnných a vlastností. Další informace naleznete v Visual Studio Language Guidance.

  2. Dále se podívejte na okno Místní hodnoty. Ve výchozím nastavení je toto okno zarovnané vedle okna Autos.

    Pokud okno během relace ladění nevidíte, otevřete okno výběrem možnosti Ladit>Windows>Místní prostředí.

  3. V okně Locals rozbalte proměnnou letters, aby se zobrazily prvky, které obsahuje.

    Snímek obrazovky, který ukazuje, jak zkontrolovat proměnné a hodnoty v okně Místní v sadě Visual Studio 2022

    Snímek obrazovky, který ukazuje, jak zkontrolovat proměnné a hodnoty v okně Místní v sadě Visual Studio.

    V okně Místní hodnoty se zobrazí proměnné, které jsou v aktuálním rozsahu , tj. aktuální kontext spuštění.

Sledovat proměnnou

Pokud vás zajímá sledování chování konkrétní proměnné, můžete nastavit sledování:

V editoru kódu klikněte pravým tlačítkem na proměnnou name a vyberte Přidat sledování. Pod editorem kódu se otevře okno Sledování . K určení proměnné (nebo výrazu), kterou chcete sledovat, můžete použít okno Kukátko.

Snímek obrazovky znázorňující okno Watch zobrazující hodnoty pro proměnnou jméno ve Visual Studio

Při sledování name proměnné během provádění aplikace v ladicím programu uvidíte její změnu hodnoty. Na rozdíl od ostatních oken proměnných kukátko vždy zobrazuje proměnné, které sledujete. Pokud sledovaná proměnná není v oboru, název proměnné je zeslabený.

Prozkoumejte zásobník volání

Okno Zásobník volání ve Visual Studio zobrazuje pořadí, v jakém jsou metody a funkce volány. Toto okno je podobné ladící perspektivě v některých vývojových prostředích jako je Eclipse. Ve výchozím nastavení je zásobník volání viditelný v pravém dolním podokně editoru kódu během ladicí relace.

  1. Zatímco je ladicí program pozastavený ve smyčce for, vyberte okno Zásobník volání a zobrazte tak aktuální strukturu volání.

    Pokud okno během ladicí relace nevidíte, vyberte Ladění>Windows>Zásobník volání pro otevření okna.

  2. Několikrát vyberte F11 (Ladění>krok do), dokud se v metodě SendMessage nezobrazí pozastavení ladicího programu.

  3. Znovu se podívejte na okno Zásobník volání:

    Snímek obrazovky, který ukazuje, jak prozkoumat zásobník volání v aplikaci Visual Studio 2022.

    Snímek obrazovky, který ukazuje, jak prozkoumat zásobník volání ve Visual Studio

    V okně Zásobník volání zobrazuje horní řádek aktuální funkci (metoda SendMessage v této aplikaci). Druhý řádek ukazuje, že metoda SendMessage byla volána z metody main atd.

Zásobník volání je dobrý způsob, jak prozkoumat a pochopit tok provádění aplikace:

  • Poklikáním na řádek kódu přejděte ke zdrojovému kódu. Tato akce také změní aktuální obor v rámci kontroly ladicím programem, ale neposouvá ladicí program.

  • Klepnutím pravým tlačítkem myši na programovací prvky přistupte k nabídkám v okně Zásobník volání. Do zadaných funkcí můžete například vložit zarážky, posunout ladicí program pomocí Spustit na kurzora procházet zdrojový kód. Další informace najdete v tématu Zobrazení zásobníku volání a používání okna Zásobník volání v ladicím programu.

Změna toku provádění

Další funkcí ladicího programu v sadě Visual Studio je možnost změnit tok provádění vaší aplikace:

  1. Pokud chcete spustit funkci , vyberte dvakrát F11 (>std::wcout).

  2. Zatímco ladicí program je pozastaven v volání metody SendMessage, vyberte a přetáhněte žlutou šipku (ukazatel provádění) doleva od proměnné a přesuňte šipku na předchozí příkaz kódu std::wcout.

  3. Znovu vyberte F11.

    Ladicí program znovu spustí funkci std::wcout. Proces můžete sledovat ve výstupu terminálu.

    Změnou toku provádění můžete provádět například testování různých cest spuštění kódu nebo opětovné spuštění kódu bez restartování ladicího programu.

    Opatrnost

    Při práci s touto funkcí věnujte pečlivou pozornost. Když vyberete žlutou šipku, Visual Studio zobrazí v tooltipu upozornění, že změna v provádění může mít nezamýšlené důsledky. V závislosti na vašem scénáři se můžou zobrazit i další upozornění. Mějte na paměti, že přesunutí ukazatele nemůže vrátit aplikaci do dřívějšího stavu aplikace.

  4. Výběrem F5 dokončete provádění aplikace.