Sdílet prostřednictvím


Použijte správný typ zarážky

Tento článek ukazuje, jak pomocí různých typů přerušovacích bodů ve Visual Studio zlepšit efektivitu ladění. Popisuje různé scénáře, kdy je možné použít zarážky, jako je pozastavení spouštění kódu, protokolování informací a sledování změn ve stavech proměnných. Článek vysvětluje, jak nastavit podmíněné zarážky, trasovací body, datové zarážky, závislé zarážky a dočasné zarážky. Obsahuje také podrobné pokyny k nastavení zarážek funkcí. Tato příručka je nezbytná pro vývojáře, kteří chtějí využít zarážky pro efektivní ladění ve Visual Studio.

Pokud neznáte používání zarážek v sadě Visual Studio, přečtěte si Začínáme se zarážkami, než si projdete tento článek.

Nejlepší zkušenosti s touto dokumentací získáte tak, že v seznamu v horní části článku vyberete upřednostňovaný vývojový jazyk nebo modul runtime.

Scénáře

Následující tabulka ukazuje běžné scénáře pro ladění zarážek a doporučené typy zarážek pro každý scénář.

Scénář Popis
Jak pozastavit spuštění kódu a zkontrolovat řádek kódu, který může obsahovat chybu? Nastavte bod přerušení. Další informace najdete v tématu Začínáme se zarážkami.
Má proměnná neočekávanou hodnotu? Nebo chci zkontrolovat aplikaci, když dosáhne určitého stavu? Vyzkoušejte podmíněnou zarážku, abyste pomocí podmíněné logiky kontrolovali, kde a kdy se zarážka aktivuje. Klikněte pravým tlačítkem myši na zarážku a přidejte podmínky. Nastavte podmínku tak, aby byla true, když se proměnná rovná neočekávané hodnotě. Další informace viz podmínky přerušení.
Jak můžu protokolovat informace do okna Výstup za konfigurovatelných podmínek beze změny nebo zastavení kódu? Trasovací body umožňují protokolovat informace do okna Výstup za konfigurovatelných podmínek beze změny nebo zastavení kódu. Další informace naleznete v tématu Použití trasovacích bodů v ladicím programu Visual Studio.
Jak poznám, kdy se změní hodnota proměnné? V jazyce C++ nastavte datovou zarážku .
Pro aplikace používající .NET Core 3 a novější můžete také nastavit datový bod přerušení.
Jinak můžete pro jazyky C# a F# sledovat ID objektu pomocí podmíněné zarážky.
Jak přeruším provádění pouze v případě, že dojde k dosažení jiného bodu přerušení? Nastavte závislý bod přerušení, který přeruší provádění pouze v případě, že je nejprve dosaženo jiného bodu přerušení. Další informace naleznete v tématu Závislý bod přerušení.
Můžu zarážku stisknout jenom jednou? Nastavte dočasný bod přerušení, který umožňuje přerušit provádění kódu pouze jednou. Další informace naleznete v tématu dočasné zarážky.
Můžu pozastavit kód uvnitř smyčky v určité iteraci? Nastavte závislý bod přerušení, který přeruší provádění pouze v případě, že se nejprve zasáhne jiný bod přerušení. Další informace najdete v tématu počet přístupů.
Můžu pozastavit kód na začátku funkce, když znám název funkce, ale ne jeho umístění? Můžete to udělat s bodem přerušení funkce. Další informace naleznete pod Nastavení zarážek funkcí.
Můžu pozastavit kód na začátku více funkcí se stejným názvem? Pokud máte více funkcí se stejným názvem (přetížené funkce nebo funkce v různých projektech), můžete použít zarážku funkce.

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ě Nastavení zarážky. 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 najdete v tématu Výrazy v ladící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 + , 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.

    Nastavení zarážky

    Nastavení zarážky

  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 Nastavení zarážky. 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:

Podmínka zarážky je true

Podmínka zarážky je true

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

Zarážka Při změně

Zarážka Při změně

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ě Nastavení zarážky 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:

Počet zarážek

Počet zarážek

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ě Nastavení zarážky 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 .

    Zarážka spravovaných dat

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ážky 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 Nastavení zarážky. Nebo v okně Zarážky kliknutím na TLAČÍTKO OK dialogové okno zavřete. Závislá zarážka

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 .

    Kontext závisléhobreakpointu

  • 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 po kliknutí v okně Nastavení zarážky vyberte Odebrat zarážku.

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

    Dočasná zarážka

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 .

    Dočasný kontext zarážky

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