Kurz: Naučte se ladit kód jazyka C++ pomocí sady Visual Studio

Tento článek představuje funkce ladicího programu sady Visual Studio v podrobném návodu. Pokud chcete zobrazit funkce ladicího programu na vyšší úrovni, podívejte se na první pohled na ladicí program. Při ladění aplikace to obvykle znamená, že spouštíte aplikaci s připojeným ladicím programem. Když to uděláte, ladicí program nabízí mnoho způsobů, jak zjistit, co váš kód dělá během jeho spuštění. Můžete procházet kód a podívat se na hodnoty uložené v proměnných, můžete nastavit kukátky na proměnných, abyste viděli, kdy se hodnoty mění, můžete prozkoumat cestu provádění kódu, zjistit, jestli je spuštěná větev kódu atd. Pokud se jedná o první pokus o ladění kódu, můžete si před procházením tohoto článku přečíst ladění pro absolutní začátečníky .

I když je ukázková aplikace C++, většina funkcí se vztahuje na C#, Visual Basic, F#, Python, JavaScript a další jazyky podporované sadou Visual Studio (jazyk F# nepodporuje úpravy a pokračování. F# a JavaScript nepodporují okno automatického vytváření . Snímky obrazovky jsou v jazyce C++.

V tomto kurzu:

  • Spusťte ladicí program a stiskněte zarážky.
  • Naučte se procházet kód v ladicím programu.
  • Kontrola proměnných v datových tipech a oknech ladicího programu
  • Prozkoumání zásobníku volání

Požadavky

Musíte mít nainstalovanou sadu Visual Studio a vývoj desktopových aplikací pomocí úlohy C++ .

Pokud jste visual Studio ještě nenainstalovali, přejděte na stránku pro stažení sady Visual Studio a nainstalujte ji zdarma.

Pokud jste visual Studio 2022 ještě nenainstalovali, přejděte na stránku pro stažení sady Visual Studio 2022 a nainstalujte ji zdarma.

Pokud potřebujete nainstalovat úlohu, ale sadu Visual Studio už máte, přejděte na Nástroje>Získat nástroje a funkce..., čímž se otevře Instalační program pro Visual Studio. Spustí se instalační program pro Visual Studio. Zvolte vývoj desktopových aplikací pomocí úlohy C++ a pak zvolte Upravit.

Vytvoření projektu

Nejprve vytvoříte projekt konzolové aplikace C++. Typ projektu se dodává se všemi soubory šablon, které budete potřebovat, než něco přidáte.

  1. Otevřete sadu Visual Studio.

    Pokud není otevřené úvodní okno, zvolte Okno Start souboru>.

  2. V úvodním okně zvolte Vytvořit nový projekt.

  3. V okně Vytvořit nový projekt zadejte nebo zadejte konzolu do vyhledávacího pole. Potom v seznamu Jazyků zvolte jazyk C++ a pak ze seznamu Platformy zvolte Windows .

    Po použití filtrů jazyka a platformy zvolte šablonu konzolové aplikace a pak zvolte Další.

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

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

    Poznámka:

    Pokud šablonu konzolové aplikace nevidíte, můžete ji nainstalovat z okna Vytvořit nový projekt. Ve zprávě Nenajděte, co hledáte? Zvolte odkaz Instalovat další nástroje a funkce. Potom v Instalační program pro Visual Studio zvolte vývoj desktopových aplikací pomocí úlohy C++.

  4. V okně Konfigurovat nový projekt zadejte nebo zadejte do pole Název projektu laděníget-started. Pak zvolte Vytvořit.

    Visual Studio otevře nový projekt.

Vytvoření aplikace

  1. V souboru get-started-debugging.cpp nahraďte veškerý výchozí kód 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;
    }
    

Spusťte ladicí program!

  1. Stiskněte klávesu F5 (>Ladění spustit ladění) nebo tlačítko Start Debugging Spustit ladění na panelu nástrojů Ladění.

    F5 spustí aplikaci s ladicím programem připojeným k procesu aplikace, ale právě teď jsme neprovedli nic zvláštního, abychom kód prozkoumali. Aplikace se tedy 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
    

    V tomto kurzu se podrobněji podíváme na tuto aplikaci pomocí ladicího programu a podíváme se na funkce ladicího programu.

  2. Zastavte ladicí program stisknutím červeného tlačítka zarážky Stop Debugging (Shift + F5).

  3. V okně konzoly stiskněte klávesu a stisknutím klávesy Enter okno konzoly zavřete.

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

  1. for Ve smyčce main funkce nastavte zarážku kliknutím na levý okraj následujícího řádku kódu:

    name += letters[i];

    Tam, kde nastavíte zarážku, se zobrazí červené kolečko Breakpoint .

    Zarážky jsou jednou z nejzásadnějších a základních funkcí spolehlivého ladění. Zarážka určuje, kde má Visual Studio spuštěný kód pozastavit, abyste mohli zkontrolovat hodnoty proměnných či chování paměti, nebo abyste zjistili, jestli se nějaká větev kódu spouští.

  2. Stiskněte klávesu F5 nebo tlačítkoStart Debugging Spustit ladění , spustí se aplikace a ladicí program se spustí na řádek kódu, kde nastavíte zarážku.

    Screenshot of setting and hitting a breakpoint.

    Žlutá šipka představuje příkaz, na kterém ladicí program pozastavil, což také pozastaví provádění aplikace ve stejném okamžiku (tento příkaz ještě nebyl spuštěn).

    Pokud aplikace ještě není spuštěná, F5 spustí ladicí program a zastaví se na první zarážce. Jinak F5 pokračuje ve spuštění aplikace na další zarážku.

    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í zarážek.

Většinou tady používáme klávesové zkratky, protože je to dobrý způsob, jak rychle spustit aplikaci v ladicím programu (ekvivalentní příkazy, jako jsou příkazy nabídky, se zobrazují v závorkách).

  1. Během pozastavení ve for smyčce v main metodě stiskněte klávesu F11 (nebo dvakrát zvolte Debug > Step Into) a přejděte na SendMessage volání metody.

    Po stisknutí klávesy F11 byste měli být na tomto řádku kódu:

    SendMessage(name, a[i]);

  2. Stisknutím klávesy F11 postupně přejděte k SendMessage metodě.

    Žlutý ukazatel přejde do SendMessage metody.

    Screenshot of using F11 to Step Into code.

    F11 je příkaz Krok do a postupně provede provádění aplikace jedním příkazem. F11 je dobrý způsob, jak prozkoumat tok provádění v nejpodrobnějších podrobnostech. (Abychom mohli procházet kód rychleji, ukážeme vám také některé další možnosti.) Ve výchozím nastavení ladicí program přeskočí kód, který není uživatelem (pokud chcete další podrobnosti, viz Jen můj kód).

    Řekněme, že jste dokončili zkoumání SendMessage metody a chcete se z metody dostat, ale zůstat v ladicím programu. Můžete to provést pomocí příkazu Krok ven .

  3. Stiskněte klávesu Shift + F11 (nebo krok odladit).>

    Tento příkaz obnoví provádění aplikace (a posune ladicí program) až do vrácení aktuální metody nebo funkce.

    Měli byste být zpět ve for smyčce v main metodě, pozastaveni při SendMessage volání metody.

  4. Opakovaně stiskněte klávesu SendMessage F11, dokud se znovu nedostanete k volání metody.

  5. Během pozastavení volání metody stiskněte klávesu F10 (nebo zvolte Krok ladění>) jednou.

    Screenshot of using F10 to Step Over code.

    Všimněte si tentokrát, že ladicí program nezakročí do SendMessage metody. F10 přejde do ladicího programu bez krokování do funkcí nebo metod v kódu aplikace (kód se stále spouští). Stisknutím klávesy F10 na SendMessage volání metody (místo F11) jsme přeskočili implementační kód SendMessage (což nás teď možná nezajímá). Další informace o různých způsobech procházení kódu najdete v tématu Navigace v ladicím programu.

  1. Stisknutím klávesy F5 přejděte na zarážku.

  2. V editoru kódu se posuňte dolů a najeďte myší na funkci v SendMessage metodě, dokud se na levé straně nezobrazí zelené tlačítko Run to Click Spustit a kliknutí.std::wcout Popis tlačítka zobrazuje "Spustit spuštění sem".

    Screenshot of using the Run to Click feature.

    Poznámka:

    Tlačítko Spustit po kliknutí je v sadě Visual Studio 2017 nové. (Pokud se tlačítko se zelenou šipkou nezobrazuje, použijte F11 v tomto příkladu místo toho, abyste ladicí program přešli na správné místo.)

  3. Klikněte na tlačítko Spustit a klikněte na tlačítko Run to Click.

    Ladicí program přejde na std::wcout funkci.

    Použití tohoto tlačítka se podobá nastavení dočasné zarážky. Spustit na kliknutí je užitečné, když se rychle dostanete do viditelné oblasti kódu aplikace (můžete kliknout do libovolného otevřeného souboru).

Rychlé restartování aplikace

Klikněte na tlačítko RestartovatRestart App na panelu nástrojů Ladění (Ctrl + Shift + F5).

Když stisknete tlačítko Restartovat, ušetří se čas a zastaví se aplikace a restartuje ladicí program. Ladicí program se pozastaví na první zarážce, na které dojde spuštěním kódu.

Ladicí program se znovu zastaví na zarážce, kterou jste předtím nastavili uvnitř smyčky for .

Kontrola proměnných pomocí tipů pro data

Funkce, které umožňují kontrolovat proměnné, jsou jednou z nejužitečnějších funkcí ladicího programu a existují různé způsoby, jak to udělat. Při pokusu o ladění problému se často pokoušíte zjistit, jestli proměnné ukládají hodnoty, které očekáváte, že budou mít v určitém okamžiku.

  1. Když je příkaz name += letters[i] pozastavený, najeďte myší na letters proměnnou a uvidíte, že je výchozí hodnota. size={10}

  2. letters Rozbalením proměnné zobrazíte její vlastnosti, které zahrnují všechny prvky, které proměnná obsahuje.

  3. Dále najeďte myší na name proměnnou a zobrazí se její aktuální hodnota, prázdný řetězec.

  4. Několikrát stiskněte klávesu F5 (nebo Ladit>pokračovat), abyste několikrát iterovala smyčkou for , znovu se přerušila na zarážce a pokaždé najeďte myší na name proměnnou, abyste zkontrolovali její hodnotu.

    Screenshot of viewing a data tip.

    Hodnota proměnné se změní s každou iterací smyčky for , zobrazující hodnoty f, pak fr, a tak fredále.

    Při ladění často chcete rychle zkontrolovat hodnoty vlastností u proměnných, abyste zjistili, jestli ukládají hodnoty, které očekáváte, že se mají ukládat, a tipy pro data jsou dobrým způsobem, jak to udělat.

Kontrola proměnných pomocí oken Automatické hodnoty a Místní hodnoty

  1. Podívejte se do okna Automatické položky v dolní části editoru kódu.

    Pokud je zavřený, otevřete ho při pozastavení v ladicím programu tak, že zvolíte Ladit>>automatické windows.

    V okně Automatické položky se zobrazí proměnné a jejich aktuální hodnota. V okně Automatické položky se zobrazí všechny proměnné použité na aktuálním řádku nebo na předchozím řádku (zkontrolujte chování specifické pro jazyk).

  2. V dalším kroku se podívejte na okno Místní hodnoty na kartě vedle okna Automatické hodnoty.

  3. Rozbalte proměnnou letters , aby se zobrazily prvky, které obsahuje.

    Screenshot of inspecting variables in the Locals Window.

    Screenshot of inspecting variables in the Locals Window.

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

Nastavení hodinek

  1. V hlavním okně editoru kódu klikněte pravým tlačítkem myši na proměnnou name a zvolte Přidat kukátko.

    Okno Kukátko se otevře v dolní části editoru kódu. Okno Kukátko můžete použít k určení proměnné (nebo výrazu), na kterou chcete mít přehled.

    Teď máte pro proměnnou nastavenou kukátku name a při procházení ladicím programem uvidíte její změnu hodnoty. Na rozdíl od ostatních oken proměnných okno Kukátko vždy zobrazuje proměnné, které sledujete (jsou neaktivní, když jsou mimo rozsah).

Prozkoumání zásobníku volání

  1. Během pozastavení ve for smyčce klikněte na okno Zásobník volání, které je ve výchozím nastavení otevřené v pravém dolním podokně.

    Pokud je zavřený, otevřete ho při pozastavení v ladicím programu tak, že zvolíte Ladění>zásobníku volání systému Windows.>

  2. Několikrát klikněte na F11 , dokud se v SendMessage metodě nezobrazí pozastavení ladicího programu. Podívejte se do okna Zásobník volání.

    Screenshot of examining the call stack.

    Screenshot of examining the call stack.

    Okno Zásobník volání zobrazuje pořadí, ve kterém se volají metody a funkce. Horní řádek zobrazuje aktuální funkci (metodu SendMessage v této aplikaci). Druhý řádek ukazuje, že SendMessage byl volána z main metody atd.

    Poznámka:

    Okno Zásobník volání je podobné perspektivě ladění v některých prostředích ID, jako je Eclipse.

    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 se můžete podívat na tento zdrojový kód a změnit také aktuální obor, který ladicí program kontroluje. Tato akce nepřevádí ladicí program.

    K dalším věcem můžete také použít nabídky po kliknutí pravým tlačítkem myši z okna Zásobník volání. Do zadaných funkcí můžete například vložit zarážky, přejít ladicí program pomocí příkazu Run to Cursor a prozkoumat zdrojový kód. Další informace naleznete v tématu Postupy: Prozkoumání zásobníku volání.

Změna toku provádění

  1. Funkci spustíte dvojím stisknutím klávesy std::wcout F11.

  2. S ladicí program pozastavený ve SendMessage volání metody, pomocí myši uchopte žlutou šipku (ukazatel provádění) vlevo a přesuňte žlutou šipku nahoru o jeden řádek zpět std::wcout.

  3. Stiskněte klávesu F11.

    Ladicí program znovu spustí std::wcout funkci (zobrazí se ve výstupu okna konzoly).

    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.

    Upozorňující

    U této funkce často musíte být opatrní a v popisu se zobrazí upozornění. Může se zobrazit i další upozornění. Přesunutí ukazatele nemůže vrátit aplikaci do dřívějšího stavu aplikace.

  4. Stisknutím klávesy F5 pokračujte ve spuštění aplikace.

    Blahopřejeme k dokončení tohoto kurzu!

Další kroky

V tomto kurzu jste se naučili, jak spustit ladicí program, procházet kód a kontrolovat proměnné. Možná se budete chtít podívat na funkce ladicího programu a odkazy na další informace.