Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 bodů přerušení a trasovací body
Tracepoint je bod přerušení, který zobrazí 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. Stopu vytvoříte nastavením zvláštní akce v okně nastavení bodu přerušení. Podrobné pokyny najdete v tématu Používání trasovacích bodů v ladicím programu Visual Studio.
Podmínky přerušení
Nastavením podmínek můžete určit, kdy a kde se bod přerušení provede. Podmínka může být jakýkoli platný výraz, který debugger rozpoznává. (Další informace o platných výrazech najdete v tématu Výrazy v ladícím programu.)
Nastavte podmínku zarážky:
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 poté 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.
V rozevíracím seznamu vyberte Podmíněný výraz, Počet zásahů nebo Filtr, a nastavte hodnotu odpovídajícím způsobem.
Vyberte možnost Zavřít nebo stiskněte Ctrl+Enter pro zavření okna Nastavení přerušení. 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 .
Získání pomoci s AI
Pokud máte Copilot, můžete získat asistenci umělé inteligence při vytváření podmíněného breakpointu. Copilot vám nabízí návrhy na podmíněné zarážky a trasovací body specifické pro váš kód.
Podrobný příklad najdete v tématu Ladění pomocí Copilotu.
Získání pomoci s AI
Pokud máte Copilot, můžete získat pomoc AI při vytváření podmíněného breakpointu. Copilot poskytuje návrhy na podmíněné přerušení a trasovací body, které jsou specifické pro váš kód.
Podrobný příklad najdete v tématu Ladění pomocí Copilotu.
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 pravda" nebo "Při změně". Zvolte True pro přerušení, když je výraz splněn, nebo Když se změní pro přerušení, když se hodnota výrazu změní.
V následujícím příkladu se bod přerušení aktivuje pouze tehdy, když je hodnota testInt4.
V následujícím příkladu se zarážka aktivuje pouze v případě, že se změní hodnota testInt.
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 se ladicí program zastaví, když dosáhne neplatný bod přerušení. Bod přerušení se přeskočí jen pokud je podmínka platná a má hodnotu false.
Poznámka:
U pole Při změně debugger nepovažuje první vyhodnocení podmínky za změnu, takže se při prvním vyhodnocení nezastaví na bodu přerušení.
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:
Nastavte zarážku v kódu na nějaké místo po vytvoření objektu.
Spusťte ladění a když se spuštění pozastaví na zarážce, vyberte Ladění>Okna>Místní (nebo stiskněte kombinaci kláves Ctrl + Alt + V, L) pro otevření okna Místní.
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í byste měli vidět $ plus číslo. Toto je ID objektu.
Přidejte novou zarážku v místě, které 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.
Použijte ID objektu v poli Podmíněný výraz . Pokud je například proměnná
itemobjektem, který se má přidat do kolekce, vyberte Hodnotu True a zadejte položku == $<n>, kde <n> je číslo ID objektu.K přerušení provádění dojde ve chvíli, 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 zásahů, a nemusíte opakovaně stisknout klávesu F5 ke každému dosažení této iterace.
V Podmínkách v okně Nastavení přerušení vyberte Počet zásahů a zadejte počet iterací. V následujícím příkladu je zarážka nastavena tak, aby se aktivovala při každé druhé iteraci.
Nastavení podmínky filtru
Přerušení můžete omezit tak, aby se aktivovalo jen 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 = "název"
- ProcessId = hodnota
- ProcessName = "název"
- ThreadId = hodnota
- ThreadName = "název"
Uzavřete řetězcové hodnoty do dvojitých uvozovek. Klauzule můžete kombinovat pomocí & (AND), || (OR), ! (NOT) a závorek.
Nastavení bodů zastavení 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).
Nastavit zarážku funkce:
Vyberte Ladění>Nový bod přerušení>Bod přerušení funkce, nebo stiskněte Ctrl + K, B.
V okně Přerušení můžete také vybrat Nová>zarážka funkce.
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!MethodAPoužijte kontextový operátor v nativním jazyce C++.
{function, , [module]} [+<line offset from start of method>]Příklad:
{MethodA, , App1.dll}+2
V rozevíracím seznamu Jazyk zvolte jazyk funkce.
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á.
Nastavte zarážku někde po vytvoření instance třídy.
Vyhledejte adresu instance (například
0xcccccccc).Vyberte Ladit>nový bod přerušení> bod přerušení funkce, nebo stiskněte Ctrl + K, B.
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.
Nastavit datovou zarážku:
V projektu .NET Core nebo .NET 5+ spusťte ladění a počkejte, až se dostanete ke kontrolnímu bodu.
V okně Autos, Watch, nebo Locals klikněte pravým tlačítkem myši na vlastnost a v místní nabídce vyberte Break when value changes.
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 Hardwarová omezení datových zarážek.
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:
V projektu .NET Core nebo .NET 5+ zahajte ladění a počkejte, až se dosáhne bodu přerušení.
V okně Automatické, Sledovat, nebo Místní klikněte pravým tlačítkem myši na vlastnost a v místní nabídce vyberte Přerušení při změně hodnoty.
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
Pro maximální počet, který můžete nastavit, viz Hardwarová omezení datových zarážek.
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ého bodu přerušení:
V projektu C++ spusťte ladění a počkejte, až bude dosažen bod přerušení. V nabídce Ladění zvolte Nová zarážka>Datová zarážka.
Můžete také vybrat Nová>Datová zarážka v okně Zarážky nebo kliknout pravým tlačítkem myši na položku v Autos, Watch nebo Locals a vybrat přerušit při změně hodnoty v místní nabídce.
Do pole Adresa zadejte adresu paměti nebo výraz, který se vyhodnotí jako adresa paměti. Například zadejte
&avar, pokud chcete přerušit, když se změní obsah proměnnéavar.V rozevíracím seznamu Počet bajtů vyberte počet bajtů, které má ladicí program sledovat. Pokud například vyberete 4, ladicí program bude sledovat čtyři bajty začínající na
&avara přeruší běh, pokud některý z těchto bajtů změní hodnotu.
Datové zarážky nefungují za následujících podmínek:
- Proces, který není podrobován ladění, zapisuje do paměťového místa.
- 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 mění z jedné ladicí relace na druhou, takže datové zarážky jsou automaticky zakázány na konci každé ladicí relace.
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 přerušení dat |
|---|---|
| x64 a x86 | 4 |
| ARM64 | 2 |
| ARM | 1 |
Nastavte závislý bod přerušení
Závislé body přerušení přeruší provádění pouze tehdy, když je nejprve dosažen jiný bod přerušení. V komplexním scénáři, jako je například ladění vícevláknové aplikace, můžete nakonfigurovat další body přerušení ve chvíli, kdy je nejprve dosaženo jiného bodu přerušení. 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.
Chcete-li nastavit závislý zarážku:
Najeďte myší na symbol zarážky, zvolte ikonu Nastavení a pak vyberte Povolit pouze při dosažení následující zarážky v okně Nastavení zarážky.
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 zvolte OK k zavření dialogového okna.
K nastavení závislého bodu přerušení můžete použít také místní nabídku pravým kliknutím.
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é přerušení.
- Závislé přerušení nefungují, není-li v aplikaci pouze jedno přerušení.
- Závislé zarážky se při odstranění požadované zarážky převedou na normální zarážku řádku.
Nastavte dočasný bod přerušení
Tento bod přerušení vám umožní přerušit 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 hned po dosažení této zarážky ji zakáže.
Chcete-li nastavit dočasnou zarážku:
Najeďte myší na symbol bodu přerušení, zvolte ikonu Nastavení a poté v okně nastavení bodu přerušení vyberte Zakázat bod přerušení po zasažení.
Zvolte Zavřít nebo stiskněte Ctrl+Enter a zavřete okno Nastavení zarážky. Nebo v okně Zarážky vyberte OK pro zavření dialogu.
K nastavení dočasné zarážky můžete použít také místní nabídku po kliknutí pravým tlačítkem myši.
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 .
Nebo jednoduše použijte klávesovou zkratku F9 + Shift + Alt, T a nastavte dočasnou zarážku na požadovaném řádku.
Nastavit závislý bod přerušení
Závislé body přerušení přeruší provádění pouze pokud je nejprve zasažen jiný bod přerušení. V komplexním scénáři, jako je ladění vícevláknové aplikace, můžete nastavit další body přerušení po tom, co je nejprve dosažen první bod přerušení. 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.
Nastavte závislý bod přerušení:
Najeďte myší na symbol zarážky, zvolte ikonu Nastavení a pak vyberte Povolit pouze při aktivaci následující zarážky v okně Nastavení zarážky.
V rozevíracím seznamu vyberte předpokládaný bod zborcení, na kterém má být aktuální bod zborcení 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 zavřete dialog.
K nastavení závislého bodu přerušení můžete použít také místní nabídku po kliknutí pravým tlačítkem myši.
Klikněte pravým tlačítkem myši na levý okraj vedle řádku kódu a v místní nabídce vyberte Vložit závislou zarážku.
- Závislé body přerušení nefungují, pokud je v aplikaci pouze jeden bod přerušení.
- Závislé zarážky se při odstranění požadované zarážky převedou na normální zarážku řádku.
Nastavte dočasný bod přerušení
Tento bod přerušení umožňuje zastavit kód pouze jednou. Při ladění ladicí program Visual Studio pozastaví běžící aplikaci pouze jednou na tuto zarážku a pak ji okamžitě po zachycení odstraní.
Nastavte dočasnou zarážku:
Najeďte myší na symbol zarážky, zvolte ikonu Nastavení a po kliknutí v okně Nastavení zarážky vyberte Odebrat zarážku.
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.
K nastavení dočasného bodu přerušení můžete použít kontextovou nabídku při kliknutí pravým tlačítkem myši.
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 .
Nebo jednoduše použijte klávesovou zkratku F9 + Shift + Alt, T a nastavte dočasnou zarážku na požadovaném řádku.