Použití zarážek v ladicím programu sady Visual Studio

Zarážky jsou jednou z nejdůležitějších technik ladění v sadě nástrojů vývojáře. Zarážky nastavíte všude, kde chcete pozastavit provádění ladicího programu. Můžete například chtít zobrazit stav proměnných kódu nebo podívat se na zásobník volání na určité zarážce. Pokud se pokoušíte vyřešit upozornění nebo problém při používání zarážek, přečtěte si téma Řešení potíží se zarážkou v ladicím programu sady Visual Studio.

Poznámka:

Pokud znáte úkol nebo problém, který se pokoušíte vyřešit, ale potřebujete vědět, jaký typ zarážky použít, přečtěte si nejčastější dotazy – Vyhledání funkce ladění.

Nastavení zarážek ve zdrojovém kódu

Zarážku můžete nastavit na libovolný řádek spustitelného kódu. Například v následujícím kódu jazyka C# můžete nastavit zarážku na řádku kódu s přiřazením proměnné (int testInt = 1), smyčkou for nebo libovolným kódem uvnitř smyčky for . Zarážku u podpisů metody, deklarací oboru názvů nebo třídy nebo deklarací proměnných nemůžete nastavit, pokud neexistuje žádné přiřazení ani getter/setter.

Nastavení zarážky ve zdrojovém kódu:

  • Klikněte na levý okraj vedle řádku kódu. Můžete také vybrat čáru a stisknout klávesu F9, vybrat Přepínač ladění> nebo kliknout pravým tlačítkem myši a vybrat Zarážku>Vložit zarážku. Zarážka se zobrazí jako červená tečka na levém okraji.

U většiny jazyků, včetně C#, zarážky a aktuálních řádků provádění, se automaticky zvýrazní. U kódu C++ můžete zapnout zvýraznění zarážky a aktuálních řádků tak, že vyberete Nástroje (nebo Ladění) >Možnosti>Ladění>Zvýraznit celý zdrojový řádek pro zarážky a aktuální příkaz (jenom C++).

Set a breakpoint

Set a breakpoint

Při ladění se provádění pozastaví na zarážce před spuštěním kódu na daném řádku. Symbol zarážky zobrazuje žlutou šipku.

Na zarážce v následujícím příkladu je hodnota testInt stále 3. Proto se hodnota nezměnila, protože proměnná byla inicializována (nastavená na hodnotu 3), protože příkaz ve žluté barvě ještě nebyl proveden.

Breakpoint execution stopped

Na zarážce v následujícím příkladu je hodnota testInt stále 1. Proto se hodnota nezměnila, protože proměnná byla inicializována (nastavená na hodnotu 1), protože příkaz ve žluté barvě ještě nebyl proveden.

Breakpoint execution stopped

Když se ladicí program zastaví na zarážce, můžete se podívat na aktuální stav aplikace, včetně hodnot proměnných a zásobníku volání.

Tady je několik obecných pokynů pro práci se zarážkou.

  • Zarážka je přepínač. Můžete na něj kliknout, stisknout klávesu F9 nebo pomocí přepínače ladění>ji odstranit nebo znovu vložit.

  • Pokud chcete zarážku zakázat bez odstranění, najeďte myší nebo na ni klikněte pravým tlačítkem myši a vyberte Zakázat zarážku. Zakázané zarážky se v levém okraji nebo v okně Zarážky zobrazují jako prázdné tečky . Pokud chcete zarážku znovu povolit, najeďte myší nebo na ni klikněte pravým tlačítkem myši a vyberte Povolit zarážku.

  • Nastavte podmínky a akce, přidejte a upravte popisky nebo exportujte zarážku tak, že na ni kliknete pravým tlačítkem a vyberete příslušný příkaz nebo na něj najedete myší a vyberete ikonu Nastavení.

Akce zarážky a trasovací body

Tracepoint je zarážka, která vytiskne zprávu do okna Výstup. Tracepoint může fungovat jako dočasný příkaz trasování v programovacím jazyce a nepřestavuje provádění kódu. Trasovací bod vytvoříte nastavením zvláštní akce v okně zarážky Nastavení. Podrobné pokyny najdete v tématu Použití trasovacích bodů v ladicím programu sady Visual Studio.

Podmínky zarážky

Nastavením podmínek můžete určit, kdy a kde se zarážka spouští. Podmínka může být libovolný platný výraz, který ladicí program rozpozná. Další informace o platných výrazech naleznete v tématu Výrazy v ladicím programu.

Nastavení podmínky zarážky:

  1. Klikněte pravým tlačítkem myši na symbol zarážky a vyberte Podmínky (nebo stiskněte Alt + F9, C). Nebo najeďte myší na symbol zarážky, vyberte ikonu Nastavení a pak v okně Nastavení zarážky vyberte Podmínky.

    Můžete také kliknout pravým tlačítkem myši na úplně levý okraj vedle řádku kódu a vybrat Vložit podmíněnou zarážku z místní nabídky a nastavit novou podmíněnou zarážku.

    Podmínky můžete nastavit také v okně Zarážky tak, že kliknete pravým tlačítkem myši na zarážku a vyberete Nastavení a pak vyberete Podmínky.

    Breakpoint settings

    Breakpoint settings

  2. V rozevíracím seznamu vyberte Podmíněný výraz, Počet přístupů nebo Filtr a nastavte hodnotu odpovídajícím způsobem.

  3. Výběrem klávesy Zavřít nebo stisknutím klávesy Ctrl+Enter zavřete okno Zarážky Nastavení. Nebo v okně Zarážky výběrem tlačítka OK dialogové okno zavřete.

Zarážky se sadou podmínek se zobrazí se symbolem ve zdrojovém + kódu a oknech Zarážky .

Vytvoření podmíněného výrazu

Když vyberete podmíněný výraz, můžete si vybrat mezi dvěma podmínkami: Je true nebo Při změně. Chcete-li po splnění výrazu změnit hodnotu, zvolte Hodnotu True , pokud je výraz splněn, nebo Když se změní hodnota výrazu.

V následujícím příkladu se zarážka dosáhne pouze v případě, že je hodnota testInt 4:

Breakpoint condition is true

Breakpoint condition is true

V následujícím příkladu se zarážka dosáhne pouze v případě, že se testInt změní hodnota:

Breakpoint When changed

Breakpoint When changed

Pokud nastavíte podmínku zarážky s neplatnou syntaxí, zobrazí se zpráva s upozorněním. Pokud zadáte podmínku zarážky s platnou syntaxí, ale neplatnou sémantikou, zobrazí se při prvním dosažení zarážky upozornění. V obou případech ladicí program přeruší, když dosáhne neplatné zarážky. Zarážka se přeskočí pouze v případě, že je podmínka platná a vyhodnotí se jako false.

Poznámka:

U pole Při změně ladicí program nepovažuje první vyhodnocení podmínky za změnu, takže se při prvním vyhodnocení nenarazí na zarážku.

Použití ID objektů v podmíněných výrazech (jenom C# a F#)

Existují časy, kdy chcete sledovat chování konkrétního objektu. Můžete například zjistit, proč byl objekt vložen do kolekce více než jednou. V jazyce C# a F# můžete vytvořit ID objektů pro konkrétní instance referenčních typů a použít je v zarážkách. ID objektu je generováno službou ladění CLR (Common Language Runtime) a přidruženou k objektu.

Vytvoření ID objektu:

  1. Nastavte zarážku v kódu na nějaké místo po vytvoření objektu.

  2. Spusťte ladění a když se spuštění pozastaví na zarážce, vyberte Ladit>místní prostředí Systému Windows>(nebo stiskněte kombinaci kláves Ctrl + Alt + V, L) a otevřete okno Místní hodnoty.

    V okně Místní hodnoty vyhledejte konkrétní instanci objektu, klikněte na ni pravým tlačítkem myši a vyberte Vytvořit ID objektu.

    V okně Místní hodnoty byste měli vidět $ číslo plus. Toto je ID objektu.

  3. Přidejte novou zarážku v okamžiku, kdy chcete prozkoumat; Například při přidání objektu do kolekce. Klikněte pravým tlačítkem myši na zarážku a vyberte Podmínky.

  4. Použijte ID objektu v poli Podmíněný výraz . Pokud je například proměnná item objektem, který se má přidat do kolekce, vyberte Hodnotu True a zadejte položku == $<n>, kde <n> je číslo ID objektu.

    Spuštění se přeruší v okamžiku, kdy se má tento objekt přidat do kolekce.

    Id objektu odstraníte tak, že kliknete pravým tlačítkem myši na proměnnou v okně Místní hodnoty a vyberete Odstranit ID objektu.

Poznámka:

ID objektů vytvářejí slabé odkazy a nezabrání uvolnění paměti objektu. Jsou platné pouze pro aktuální ladicí relaci.

Nastavení podmínky počtu přístupů

Pokud máte podezření, že se smyčka v kódu začne chovat nesprávně po určitém počtu iterací, můžete nastavit zarážku, která zastaví provádění po daném počtu přístupů, a nemusíte opakovaně stisknout klávesu F5 , aby se tato iterace dostala.

V části Podmínky v okně zarážky Nastavení vyberte Počet přístupů a zadejte počet iterací. V následujícím příkladu je zarážka nastavená tak, aby se při každé další iteraci udeřila:

Breakpoint hit count

Breakpoint hit count

Nastavení podmínky filtru

Zarážku můžete omezit tak, aby se aktivovala jenom na zadaných zařízeních nebo v zadaných procesech a vláknech.

V části Podmínky v okně zarážky Nastavení vyberte Filtr a zadejte jeden nebo více následujících výrazů:

  • MachineName = "name"
  • ProcessId = hodnota
  • ProcessName = "name"
  • ThreadId = hodnota
  • ThreadName = "name"

Uzavřete řetězcové hodnoty do dvojitých uvozovek. Klauzule můžete kombinovat pomocí & (AND), || (OR), ! (NOT) a závorek.

Nastavení zarážek funkcí

Provádění můžete přerušit při volání funkce. To je užitečné například v případě, že znáte název funkce, ale ne její umístění. To je také užitečné, pokud máte funkce se stejným názvem a chcete je rozdělit na všechny (například přetížené funkce nebo funkce v různých projektech).

Nastavení zarážky funkce:

  1. Vyberte Ladit>novou zarážku> funkce nebo stiskněte Ctrl + K, B.

    V okně Zarážky můžete také vybrat novou>zarážkufunkce.

  2. V dialogovém okně Nová zarážka funkce zadejte název funkce do pole Název funkce.

    Zúžení specifikace funkce:

    • Použijte plně kvalifikovaný název funkce.

      Příklad: Namespace1.ClassX.MethodA()

    • Přidejte typy parametrů přetížené funkce.

      Příklad: MethodA(int, string)

    • K zadání modulu použijte symbol !.

      Příklad: App1.dll!MethodA

    • Použijte kontextový operátor v nativním jazyce C++.

      {function, , [module]} [+<line offset from start of method>]

      Příklad: {MethodA, , App1.dll}+2

  3. V rozevíracím seznamu Jazyk zvolte jazyk funkce.

  4. Vyberte OK.

Nastavení zarážky funkce pomocí adresy paměti (pouze nativní jazyk C++)

Adresu objektu můžete použít k nastavení zarážky funkce pro metodu volanou konkrétní instancí třídy. Například vzhledem k adresovatelnému objektu typu my_classmůžete nastavit zarážku funkce pro metodu my_method , kterou instance volá.

  1. Nastavte zarážku někde po vytvoření instance třídy.

  2. Vyhledejte adresu instance (například 0xcccccccc).

  3. Vyberte Ladit>novou zarážku> funkce nebo stiskněte Ctrl + K, B.

  4. Do pole Název funkce přidejte následující text a vyberte jazyk C++.

    ((my_class *) 0xcccccccc)->my_method
    

Nastavení datových zarážek (.NET Core 3.x nebo .NET 5+)

Datové zarážky přeruší provádění, když se změní vlastnost konkrétního objektu.

Nastavení datové zarážky:

  1. V projektu .NET Core nebo .NET 5+ spusťte ladění a počkejte, až se dosáhne zarážky.

  2. V okně Automatické hodnoty, Kukátko nebo Místní hodnoty klikněte pravým tlačítkem myši na vlastnost a v místní nabídce vyberte Možnost Přerušit .

    Managed Data Breakpoint

Datové zarážky pro .NET Core a .NET 5+ nebudou fungovat pro:

  • Vlastnosti, které se nedají rozbalit v okně Popis, Místní hodnoty, Automatické hodnoty nebo Kukátko
  • Statické proměnné
  • Třídy s atributem DebuggerTypeProxy
  • Pole uvnitř struktur

Maximální počet, který můžete nastavit, najdete v tématu Omezení hardwaru datové zarážky.

Nastavení datových zarážek (pouze nativní jazyk C++)

Datové zarážky přeruší provádění, když se změní hodnota uložená na zadané adrese paměti. Pokud se hodnota přečte, ale nezmění se, provádění se neporuší.

Nastavení datové zarážky:

  1. V projektu C++ spusťte ladění a počkejte na dosažení zarážky. V nabídce Ladění zvolte Nová zarážka Datová zarážka>.

    Můžete také vybrat nový>datový zarážku v okně Zarážky nebo kliknout pravým tlačítkem myši na položku v okně Automatické hodnoty, Kukátko nebo Místní hodnoty a vybrat Zalomit při změně hodnoty v místní nabídce.

  2. Do pole Adresa zadejte adresu paměti nebo výraz, který se vyhodnotí jako adresa paměti. Pokud se například změní obsah proměnnéavar, zadejte &avar konec.

  3. V rozevíracím seznamu Počet bajtů vyberte počet bajtů, které má ladicí program sledovat. Pokud například vyberete hodnotu 4, ladicí program bude sledovat čtyři bajty začínající na &avar a přerušit, pokud některý z těchto bajtů změní hodnotu.

Datové zarážky nefungují za následujících podmínek:

  • Proces, který není laděný, zapisuje do umístění paměti.
  • Umístění paměti se sdílí mezi dvěma nebo více procesy.
  • Umístění paměti se aktualizuje v rámci jádra. Pokud je například paměť předána 32bitové funkci Windows ReadFile , paměť se aktualizuje z režimu jádra, takže ladicí program se při aktualizaci neruší.
  • Kde je výraz watch větší než 4 bajty na 32bitovém hardwaru a 8 bajtů na 64bitovém hardwaru. Jedná se o omezení architektury x86.

Poznámka:

  • Datové zarážky závisí na konkrétních adresách paměti. Adresa proměnné se změní z jedné relace ladění na další, takže datové zarážky jsou na konci každé ladicí relace automaticky zakázané.

  • Pokud nastavíte zarážku dat v místní proměnné, zůstane zarážka povolená, když funkce skončí, ale adresa paměti se už nedá použít, takže chování zarážky je nepředvídatelné. Pokud nastavíte zarážku dat v místní proměnné, měli byste zarážku před ukončením funkce odstranit nebo zakázat.

Omezení hardwaru datové zarážky

Jádro Windows a základní hardware mají při nastavování datových zarážek následující omezení. Limit odkazuje na maximální počet datových zarážek, které můžete nastavit.

Architektura procesoru Limit zarážky dat
x64 a x86 4
ARM64 2
ARM 0

Nastavení závislé zarážky

Závislé zarážky přeruší provádění pouze v případě, že se poprvé dosáhne jiné zarážky. V komplexním scénáři, jako je například ladění vícevláknové aplikace, můžete nakonfigurovat další zarážky po prvním dosažení jiné zarážky. To může usnadnit ladění kódu v běžných cestách, jako je herní smyčka nebo rozhraní API nástroje, protože zarážku v těchto funkcích lze nakonfigurovat tak, aby povolovala pouze v případě, že je funkce vyvolána z konkrétní části vaší aplikace.

Nastavení závislé zarážky:

  1. Najeďte myší na symbol zarážky, zvolte ikonu Nastavení a pak vyberte Povolit pouze v případě, že se v okně Nastavení zarážce zobrazí následující zarážka.

  2. V rozevíracím seznamu vyberte požadovanou zarážku, na které má být aktuální zarážka závislá.

Zvolte Zavřít nebo stiskněte Ctrl+Enter a zavřete okno Zarážky Nastavení. Nebo v okně Zarážky kliknutím na TLAČÍTKO OK dialogové okno zavřete. Dependent Breakpoint

K nastavení závislé zarážky můžete použít také místní nabídku po kliknutí pravým tlačítkem myši.

  1. Klikněte pravým tlačítkem myši na úplně levý okraj vedle řádku kódu a v místní nabídce vyberte Vložit závislý zarážku .

    Dependentbreakpoint context

  • Závislé zarážky nefungují, pokud je v aplikaci jenom jedna zarážka.
  • Závislé zarážky se při odstranění požadované zarážky převedou na normální zarážku řádku.

Nastavení dočasné zarážky

Tato zarážka umožňuje rozdělit kód pouze jednou. Při ladění ladicí program sady Visual Studio pozastaví spuštěnou aplikaci pouze jednou pro tuto zarážku a pak ji okamžitě po dosažení této zarážky odebere.

Nastavení dočasné zarážky:

  1. Najeďte myší na symbol zarážky, zvolte ikonu Nastavení a potom v okně Nastavení zarážky vyberte Odebrat zarážku.

  2. Zvolte Zavřít nebo stiskněte Ctrl+Enter a zavřete okno Zarážky Nastavení. Nebo v okně Zarážky kliknutím na TLAČÍTKO OK dialogové okno zavřete.

    Temporary breakpoint

K nastavení dočasné zarážky můžete použít také místní nabídku po kliknutí pravým tlačítkem myši.

  1. Klikněte pravým tlačítkem myši na pravý okraj vedle řádku kódu a v místní nabídce vyberte Vložit dočasnou zarážku .

    Temporary breakpoint context

Nebo jednoduše použijte klávesovou zkratku F9 + Shift + Alt, T a nastavte dočasnou zarážku na požadovaném řádku.

Správa zarážek v okně Zarážky

Pomocí okna Zarážky můžete zobrazit a spravovat všechny zarážky ve vašem řešení. Toto centralizované umístění je zvlášť užitečné ve velkém řešení nebo pro složité scénáře ladění, ve kterých jsou zarážky kritické.

V okně Zarážky můžete vyhledávat, řadit, filtrovat, povolit nebo zakázat nebo odstranit zarážky. Můžete také nastavit podmínky a akce nebo přidat novou funkci nebo zarážku dat.

Pokud chcete otevřít okno Zarážky, vyberte Ladit>zarážky systému Windows>nebo stiskněte kombinaci kláves Ctrl+Alt+B.

Breakpoints window

Breakpoints window

Pokud chcete vybrat sloupce, které se mají zobrazit v okně Zarážky , vyberte Zobrazit sloupce. Výběrem záhlaví sloupce seřadíte seznam zarážek podle daného sloupce.

Popisky zarážek

Pomocí popisků můžete řadit a filtrovat seznam zarážek v okně Zarážky .

  1. Pokud chcete přidat popisek do zarážky, klikněte pravým tlačítkem myši na zarážku ve zdrojovém kódu nebo v okně Zarážky a pak vyberte Upravit popisky. Přidejte nový popisek nebo zvolte existující a pak vyberte OK.
  2. Seznam zarážek v okně Zarážky seřadíte tak , že vyberete záhlaví popisků, podmínek nebo jiných sloupců. Sloupce, které chcete zobrazit, můžete vybrat výběrem možnosti Zobrazit sloupce na panelu nástrojů.

Export a import zarážek

Pokud chcete uložit nebo sdílet stav a umístění zarážek, můžete je exportovat nebo importovat.

  • Pokud chcete exportovat jednu zarážku do souboru XML, klikněte pravým tlačítkem myši na zarážku ve zdrojovém kódu nebo okně Zarážky a vyberte Exportovat nebo Exportovat. Vyberte umístění exportu a pak vyberte Uložit. Výchozím umístěním je složka řešení.
  • Pokud chcete exportovat několik zarážek, vyberte v okně Zarážky pole vedle zarážek nebo do vyhledávacího pole zadejte kritéria hledání. Vyberte možnost Exportovat všechny zarážky odpovídající aktuální ikoně kritérií hledání a soubor uložte.
  • Pokud chcete exportovat všechny zarážky, zrušte výběr všech polí a ponechte pole Hledat prázdné. Vyberte možnost Exportovat všechny zarážky odpovídající aktuální ikoně kritérií hledání a soubor uložte.
  • Pokud chcete importovat zarážky, vyberte v okně Zarážky z ikony souboru Importovat zarážky, přejděte do umístění souboru XML a vyberte Otevřít.

Nastavení zarážek z oken ladicího programu

Můžete také nastavit zarážky z oken ladicího programu zásobníku volání a zpětného překladu .

Nastavení zarážky v okně Zásobník volání

Pokud chcete přerušit instrukce nebo řádek, na který se volající funkce vrátí, můžete nastavit zarážku v okně Zásobník volání.

Nastavení zarážky v okně Zásobník volání:

  1. Pokud chcete otevřít okno Zásobník volání, musíte být během ladění pozastaveni. Vyberte Ladit>zásobník volání systému Windows>nebo stiskněte kombinaci kláves Ctrl+Alt+C.

  2. V okně Zásobník volání klikněte pravým tlačítkem myši na volající funkci a vyberte Zarážku Vložit zarážku> nebo stiskněte klávesu F9.

    Vedle názvu volání funkce v levém okraji zásobníku volání se zobrazí symbol zarážky.

Zarážka zásobníku volání se zobrazí v okně Zarážky jako adresa s umístěním paměti, které odpovídá další spustitelné instrukci funkce.

Ladicí program se přeruší v instrukci.

Další informace o zásobníku volání najdete v tématu Postupy: Použití okna Zásobník volání.

Pokud chcete vizuálně trasovat zarážky během provádění kódu, přečtěte si téma Mapovací metody v zásobníku volání při ladění.

Nastavení zarážky v okně zpětného překladu

  1. Pokud chcete otevřít okno zpětného překladu, musíte být během ladění pozastaveni. Vyberte Ladění>zpětného překladu systému Windows>nebo stiskněte kombinaci kláves Ctrl+Alt+D.

  2. V okně Zpětné překladu klikněte na levý okraj instrukce, u které chcete přerušit. Můžete ho také vybrat a stisknout klávesu F9 nebo kliknout pravým tlačítkem myši a vybrat Zarážku Vložit zarážku>.