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.
Při ladění v uživatelském režimu aktivujete, zobrazíte, pozastavíte, obnovíte, zablokujete a odblokujete procesy a vlákna.
Aktuální nebo aktivní proces je proces, který se právě ladí. Podobně aktuální nebo aktivní vlákno je vlákno, které ladicí program aktuálně řídí. Akce mnoha příkazů ladicího programu jsou určeny identitou aktuálního procesu a vlákna. Aktuální proces také určuje mapování virtuálních adres, které debugger používá.
** Při zahájení ladění je aktuální proces ten, ke kterému je ladicí program připojen nebo který způsobil výjimku, jež vedla k návratu do ladicího programu. Podobně je aktuální vlákno to, které bylo aktivní, když se ladicí program připojil k procesu, nebo to, které způsobilo výjimku. Ladicí program však můžete použít ke změně aktuálního procesu a vlákna a ke zmrazení nebo uvolnění jednotlivých vláken.
V režimu jádra při ladění nejsou procesy a vlákna řízeny metodami, které jsou popsány v této části. Další informace o tom, jak se zpracovávají procesy a vlákna v režimu jádra, najdete v tématu Změna kontextu.
Zobrazení procesů a vláken
Chcete-li zobrazit informace o procesu a vláknu, můžete použít následující metody:
| (Stav procesu) příkaz
Příkaz ~ (Stav vlákna)
(jenom WinDbg) Okno procesů a vláken
Nastavení aktuálního procesu a vlákna
Pokud chcete změnit aktuální proces nebo vlákno, můžete použít následující metody:
(jenom WinDbg) Okno procesů a vláken
Ukotvení a pozastavení vláken
Ladicí program může změnit spuštění vlákna pozastavením vlákna nebo ukotvením vlákna. Tyto dvě akce mají poněkud odlišné účinky.
Každé vlákno má přidružený počet pozastavení . Pokud je tento počet jeden nebo větší, systém nespustí vlákno. Pokud je počet nulový nebo nižší, systém v případě potřeby spustí vlákno.
Každé vlákno má obvykle nulový počet pozastavení. Když se ladicí program připojí k procesu, zvýší počet pozastavení všech vláken v daném procesu o jeden. Pokud se ladicí program odpojí od procesu, sníží všechny počty pozastavení o jeden. Když ladicí program spustí proces, dočasně sníží všechny počty pozastavení o jeden.
Počet pozastavení libovolného vlákna z ladicího programu můžete řídit pomocí následujících metod:
Příkaz ~n (Pozastavit vlákno) zvýší počet pozastavení zadaného vlákna o jeden.
Příkaz ~m (Obnovit vlákno) sníží počet pozastavení zadaného vlákna o jeden.
Nejběžnějším použitím těchto příkazů je zvýšit počet pozastavení určitého vlákna z jednoho na dva. Když ladicí program vykoná operaci nebo se odpojí od procesu, vlákno má pak počet pozastavení jedna a zůstává pozastaveno, i když jsou ostatní vlákna v procesu spuštěna.
Vlákna můžete pozastavit i v případě, že provádíte neinvazivní ladění.
Ladicí program může také ukotvit vlákno. Tato akce se podobá pozastavení vlákna některými způsoby. "Zmrazené" je však pouze nastavení ladicího programu. Nic v operačním systému Windows nerozpozná, že se v tomto vlákně něco liší.
Ve výchozím nastavení jsou všechna vlákna unfrozen. Když ladicí program způsobí spuštění procesu, vlákna, která jsou zablokovaná, se nespustí. Pokud se však debugger odpojí od procesu, všechna vlákna se odblokují.
Pokud chcete ukotvit a odblokovat jednotlivá vlákna, můžete použít následující metody:
Příkaz ~f (Ukotvit vlákno) zablokuje zadané vlákno.
Příkaz ~u (Unfreeze Thread) zruší uvolnění zadaného vlákna.
Za všech okolností se vlákna, která patří do cílového procesu, neprovádějí, když ladicí program přeruší cílový proces. Počet pozastavení vlákna ovlivňuje chování vlákna pouze v případech, kdy ladicí program spustí proces nebo odpojí. Stav zmrazení ovlivňuje chování vlákna pouze v případech, kdy ladicí program spustí proces.
Vlákna a procesy v jiných příkazech
Před mnoha dalšími příkazy můžete přidat specifikátory vláken nebo specifikátory procesů. Další informace najdete v jednotlivých tématech o příkazech.
Kvalifikátor ~e (Thread-Specific Command) můžete přidat před mnoho příkazů a příkazů rozšíření. Tento kvalifikátor způsobí, že se příkaz spustí s ohledem na zadané vlákno. Tento kvalifikátor je zvlášť užitečný, pokud chcete použít příkaz na více než jedno vlákno. Následující příkaz například zopakuje příkaz rozšíření !gle pro každé vlákno, které je laděné.
~*e !gle
Více systémů
Ladicí program se může současně připojit k více cílům. Pokud tyto procesy zahrnují soubory výpisu paměti nebo obsahují živé cíle na více než jednom počítači, ladicí program odkazuje na systém, proces a vlákno pro každou akci. Další informace o tomto typu ladění naleznete v tématu Ladění více cílů.