Sdílet prostřednictvím


Ladění více cílů najednou

Současně můžete ladit více souborů s výpisem paměti nebo živých aplikací v uživatelském režimu. Každý cíl obsahuje jeden nebo více procesů a každý proces obsahuje jedno nebo více vláken.

Tyto cíle jsou také seskupeny do systémů. Systémy jsou sady cílů, které jsou seskupené dohromady pro snadnou identifikaci a manipulaci. Systémy jsou definovány takto:

  • Každý soubor výpisu stavu systému v režimu jádra nebo režimu uživatele je samostatný systém.

  • Při ladění živých aplikací v uživatelském režimu na různých počítačích (pomocí procesového serveru, například Dbgsrv), je každá aplikace samostatný systém.

  • Při ladění živých aplikací v uživatelském režimu na místním počítači se aplikace zkombinují do jednoho systému.

Systém označený jako „aktuální“ nebo „aktivní“ je systém, který právě ladíte.

Zaměření na více cílů

První cíl se získá obvyklým způsobem.

Další živé aplikace v uživatelském režimu můžete ladit pomocí .attach (Připojit k procesu) nebo příkazu .create (Vytvořit proces), následujícím příkazem g (Go).

Další soubory s výpisem paměti můžete ladit pomocí příkazu .opendump (Otevřít soubor s výpisem) a poté použít příkaz g (Go). Při spuštění ladicího programu můžete také otevřít více souborů s výpisem paměti. Pokud chcete otevřít více souborů s výpisem paměti, zahrňte do příkazu několik přepínačů -z, za kterými následuje různý název souboru.

Předchozí příkazy můžete použít i v případě, že jsou procesy v různých systémech. Na každém systému musíte spustit procesový server a pak pomocí parametru -premote s parametrem .attach nebo .create identifikovat správný procesový server. Pokud použijete příkaz .attach nebo .create znovu bez zadání parametru -premote, ladicí program se připojí nebo vytvoří proces v aktuálním systému.

Ovládání systémů a cílů

Při zahájení ladění je aktuální systém ten, ke kterému byl ladicí program naposledy připojen. Pokud dojde k výjimce, aktuální systém přepne do systému, na který k této výjimce došlo.

Pokud chcete zavřít jeden cíl a pokračovat v ladění ostatních cílů, použijte příkaz .kill (Kill Process). Můžete použít příkaz .detach (Odpojit od procesu) nebo ladění WinDbg | Detach Debuggee příkaz nabídky. Tyto příkazy odpojí ladicí program od cíle, ale cíl ponechají spuštěný.

K řízení ladění více systémů můžete použít následující metody:

Pomocí těchto příkazů vyberte aktuální systém a pomocí standardních příkazů vybrat aktuální proces a vláknomůžete určit kontext příkazů, které zobrazují paměť a registru.

Provádění těchto procesů však nelze oddělit. Příkazg (Go) vždy způsobí, že se všechny cíle spustí společně.

Poznámka Při současném ladění živých cílů a výpisu paměti se mohou vyskytnout komplikace, protože příkazy se pro každý typ ladění mohou chovat odlišně. Pokud například použijete příkaz g (Go), když je aktuálním systémem soubor s výpisem paměti, ladicí program se spustí, ale nemůžete se vrátit zpět do ladicího programu, protože příkaz break není rozpoznán jako platný pro ladění souboru s výpisem paměti.

Příklad

Pokud chcete pracovat se třemi soubory výpisu paměti najednou, můžete je načíst při spuštění WinDbg pomocí volby -z.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

Další informace naleznete v tématu WinDbg Command-Line Možnosti. Můžete také použít příkazy .opendump a g (Go) k načtení dalších souborů výpisu do ladicího programu.

Použití || (Stav systému) příkaz k potvrzení, že jsou k dispozici všechny tři systémy.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

K dokončení načítání souborů s výpisem paměti použijte příkaz g (Go).

||0:0:007> g

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun  9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3

Pak použijte ||s (Nastavit aktuální systém) příkaz k nastavení aktuálního systému na systém 1 a zobrazení aktuálního systému.

||1:1:017> ||1s
||1:1:017> ||
   0 User mini dump: c:\notepad.dmp
.  1 User mini dump: c:\paint.dmp
   2 User mini dump: c:\calc.dmp

Jakmile dokončíte prohlížení aktuálního výpisu dat, můžete použít příkaz .detach.

||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3
Detached
||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   2 User mini dump: c:\calc.dmp

Prostředky

Další informace o ladění najdete v následujících zdrojích.

knihy

  • Pokročilé ladění Windows od Maria Hewardta a Daniela Pravata

  • Ladění v systému Windows: Praktický průvodce laděním a trasováním strategií ve Windows od Tarik Soulami

  • Windows Internals od Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich a David A. Solomon

Video

The Defrag Tools Show WinDbg Epizods 13-29: </shows/defrag-tools/>