Sdílet prostřednictvím


Ovládání cíle

Při ladění cílové aplikace v uživatelském režimu nebo cílovém počítači v režimu jádra je možné cíl spustit nebo zastavit.

Když se ladicí program připojí k cíli v režimu jádra, nechá ladicí program spuštěný, pokud nepoužíváte možnost příkazového řádku-b, cílový systém přestal reagovat (tj. chybově ukončen) nebo je cílový systém stále zastaven kvůli dřívější akci ladění jádra.

Když se ladicí program spustí nebo připojí k cíli v uživatelském režimu, ladicí program okamžitě zastaví cíl, pokud nepoužijete možnost příkazového řádku -g . Další informace naleznete v tématu Počáteční zarážka.

Když je cíl v provozu

Když je cíl spuštěný, většina akcí ladicího programu není k dispozici.

Pokud chcete zastavit spuštěný cíl, můžete vydat příkaz Break . Tento příkaz způsobí, že ladicí program přeruší cílový proces. To znamená, že ladicí program zastaví cílový program a veškeré ovládání se předá ladicímu programu. Aplikace se nemusí okamžitě přerušit. Pokud například všechna vlákna aktuálně spouští systémový kód nebo jsou v operaci čekání, aplikace se přeruší až po vrácení ovládacího prvku do kódu aplikace.

Pokud běžící cílový proces narazí na výjimku, pokud dojde k určitým událostem, pokud dojde k zastavení na zarážce, nebo pokud se aplikace normálně ukončí, cílový proces vstoupí do ladicího programu. Tato akce zastaví cíl a poskytne ladicímu programu veškerou kontrolu. V okně Příkazu ladicího programu se zobrazí zpráva s popisem chyby, události nebo zarážky.

Když je cíl zastaven

Pokud chcete spustit nebo kontrolovat provádění cíle, můžete provést následující akce:

  • Pokud chcete, aby aplikace začala běžet, spusťte příkaz Go .

  • Pokud chcete postupně procházet jednotlivé instrukce aplikace, použijte příkazy Step Into nebo Step Over . Pokud dojde k volání funkce, Step Into vstoupí do funkce a pokračuje krokováním přes jednotlivé instrukce. Přeskočit považuje volání funkce za jeden krok. Pokud je ladicí program v režimu strojového kódu, krokování probíhá postupně po jedné instrukci. Pokud je ladicí program ve zdrojovém režimu, krokování probíhá po jednom zdrojovém řádku.

  • Pokud chcete dokončit aktuální funkci a zastavit při návratu, použijte příkazy Step Out nebo Trace a Watch . Příkaz Krok ven pokračuje až do ukončení aktuální funkce. Trace and Watch nepřetržitě běží až do konce aktuální funkce a zobrazí také souhrn všech volání funkce. Musíte však vydat příkaz Trace a Watch na první instrukci příslušné funkce.

  • Pokud dojde k výjimce, můžete použít příkazy Přejít s výjimkou, která byla zpracována a Přejít s výjimkou, která nebyla zpracována, abyste obnovili spuštění a kontrolovali stav výjimky. (Další informace o výjimkách naleznete v tématu Řízení výjimek a událostí.)

  • (jenom WinDbg) Pokud vyberete řádek v okně disassembly nebo v okně zdrojovém a pak použijete příkaz Spustit do kurzoru, program bude spuštěn, dokud nedosáhne vybraného řádku.

  • (Pouze uživatelský režim) Pokud chcete cílovou aplikaci zavřít a restartovat ji od začátku, použijte příkaz Restartovat . Tento příkaz můžete použít pouze s procesem, který ladicí program vytvořil. Po restartu procesu se okamžitě přeruší a přejde do ladicího programu.

  • (jenom WinDbg) Pokud chcete cílovou aplikaci zavřít a vymazat ladicí program, použijte příkaz Zastavit ladění . Tento příkaz umožňuje spustit ladění jiného cíle.

Příkazové formuláře

Většina příkazů pro spuštění nebo řízení cíle je dostupná jako textové příkazy, příkazy v nabídce, tlačítka na panelu nástrojů a klávesové zkratky. Jako základní textové příkazy můžete tyto příkazy použít v CDB, KD nebo WinDbg. (Textová forma příkazů často podporuje další možnosti, například změnu umístění čítače programu nebo provádění pevného počtu instrukcí.) Můžete používat příkazy z nabídky, tlačítka panelu nástrojů a klávesové zkratky ve WinDbg.

Příkazy můžete použít v následujících formulářích.

Příkaz Příkaz WinDbg Klávesové zkratky WinDbg Účinek

Ladění | Spustit na kurzor

F7

CTRL+F10

(jenom WinDbg) Spustí se, dokud nedosáhne řádku, který označí kurzor.

Ladění | Zastavit ladění

SHIFT+F5

Zastaví veškeré ladění a zavře cílové zařízení.

(jenom CDB/KD) CTRL+C

Ladění | Přerušení

CTRL+BREAK

Provádění se zastaví a ladicí program zasáhne do cíle.

.restart (restartování cílové aplikace)

Ladění | Restartovat

CTRL+SHIFT+F5

(Pouze uživatelský režim) Restartuje cílovou aplikaci.

g (Go)

Ladění | Spustit

F5

Cíl se spustí volně.

gc (Pokračovat od podmíněného bodu zlomu)

Obnoví provádění po podmíněné zarážce.

gh (Zpracování výjimek)

Ladění | Výjimka zpracovaná pokračováním

Stejné jako g (Go) s tím rozdílem, že aktuální výjimka je považována za zpracována.

gn (Pokračovat s nevyřešenou výjimkou)

Ladění | Neošetřená výjimka Go

Stejné jako g (Go) s tím rozdílem, že aktuální výjimka je považována za neošetřenou.

gu (Přejít nahoru)

Ladění | Krok ven

SHIFT+F11

Cíl se spustí, dokud nebude dokončena aktuální funkce.

p (krok)

Ladění | Přestoupit

F10

Cíl spustí jednu instrukci. Pokud je tato instrukce voláním funkce, spustí se tato funkce jako jediný krok.

pa (krok k adrese)

Cíl vykonává, dokud nedostane zadanou adresu. Všechny kroky této funkce jsou zobrazeny (ale kroky ve volaných funkcích nejsou).

pc (krok k dalšímu volání)

Cíl se spustí až do další instrukce volání . Pokud aktuální instrukce volání, toto volání je zcela vykonáno a provádění pokračuje až do dalšího volání.

pct (krok k dalšímu volání nebo vrácení)

Cíl se spustí, dokud nedosáhne instrukce volání nebo návratové instrukce.

Ph (krok k další větvice)

Cíl se spustí, dokud nedosáhne jakéhokoli druhu instrukce větvení, včetně podmíněných nebo nepodmíněných větví, volání, návratů a systémových volání.

pt (Krok k dalšímu návratu)

Cíl se spustí, dokud nedosáhne návratové instrukce.

t (trasování)

Ladění | Krok do

F11

F8

Cíl spustí jednu instrukci. Pokud je tato instrukce voláním funkce, ladicí program sleduje toto volání.

ta (trasování na adresu)

Cíl se spustí, až dosáhne zadané adresy. Zobrazí se všechny kroky v této funkci a volané funkce.

tb (Trasování na další větev)

(Všechny režimy kromě režimu jádra, pouze v systémech založených na platformě x86) Cíl se spustí, dokud nedosáhne instrukce další větve.

tc (sledování na další volání)

Cílový kód se spustí, dokud neproběhne další instrukce volání. Pokud je aktuální instrukce typu volání, trasuje se instrukce, dokud nedosáhne nového volání.

tct (trace na další volání nebo návrat)

Cíl se vykonává, dokud nedosáhne instrukce volání nebo instrukce návratu. Pokud je aktuální instrukce instrukce volání nebo návratové instrukce, instrukce se trasuje do doby, než se dosáhne nového volání nebo návratu .

th (sledování k následující větvící instrukci)

Cíl se spustí, dokud nedosáhne jakéhokoli druhu instrukce větvení, včetně podmíněných nebo nepodmíněných větví, volání, návratů a systémových volání. Pokud je aktuální instrukce instrukcí větvení, je sledována až do chvíle, než je dosažena nová instrukce větvení.

tt (trasování k dalšímu návratu)

Cíl se spustí, dokud nedosáhne návratové instrukce. Pokud je aktuální instrukce návratovou instrukcí, je instrukce sledována, dokud se nedosáhne nového návratu.

wt (trasování a sledování dat)

Cíl se provede, dokud nedokončí celou zadanou funkci. Pak se zobrazí statistika.

Další informace o restartování cílového počítače naleznete v tématu Chybové ukončení a restartování cílového počítače.

Možnosti příkazového řádku

Pokud nechcete, aby se aplikace okamžitě zastavila při spuštění nebo načtení, použijte cdB nebo WinDbg společně s možností příkazového řádku -g . Další informace o této situaci naleznete v tématu Počáteční zarážka.

CDB a WinDbg také podporují možnost příkazového řádku-G. Tato možnost způsobí, že se relace ladění ukončí, pokud se aplikace dokončí správně.

Následující příkaz se pokusí spustit aplikaci od začátku do konce a výzva ladicího programu se zobrazí pouze v případě, že dojde k chybě.

cdb -g -G ApplicationName 

K nastavení časového limitu přerušení můžete použít -ptmožnost příkazového řádku. Existují určité problémy, které můžou znemožnit cíli komunikaci s ladicím programem. Pokud je vydán příkaz break a ladicí program nemůže po této době rozdělit do cíle, zobrazí ladicí program zprávu "Vypršel časový limit přerušení".

V tomto okamžiku se ladicí program přestane pokoušet narušit cíl. Místo toho ladicí program pozastaví cíl a umožní prozkoumat (ale ne řídit) cílovou aplikaci.

Výchozí časový limit je 30 sekund.