Kombinování této metody se vzdáleným laděním
Někdy je užitečné řídit ladicí program uživatelského režimu z ladicího programu jádra a používat ladicí program uživatelského režimu jako ladicí server současně.
Důležitý
Při použití vzdáleného ladění existují další důležité aspekty zabezpečení, další informace, včetně informací o povolení zabezpečeného režimu, viz Zabezpečení během vzdáleného ladění a Aspekty zabezpečení pro nástroje ladění systému Windows.
Tato konfigurace je užitečná například v případě, že se symboly uživatelského režimu nacházejí na serveru symbolů. Ve standardní konfiguraci pro ovládání ladicího programu v uživatelském režimu z ladicího programu jádra může interakce dvou ladicích programů vést k drobným výpadkům synchronizace a tyto výpadky mohou bránit ověřování symbolového serveru. Složitější konfigurace popsaná zde může tomuto problému zabránit.
Poznámka Při popisu tohoto scénáře cílová aplikace odkazuje na aplikaci v uživatelském režimu, která se ladí, cílový počítač odkazuje na počítač, který obsahuje cílovou aplikaci a proces CDB nebo NTSD, a hostitelský počítač odkazuje na počítač, který obsahuje ladicí program jádra.
Chcete-li použít tuto techniku, musíte provést následující:
Na cílovém počítači spusťte NTSD nebo CDB s možnostmi -ddefer a -server příkazového řádku a určete požadované možnosti přenosu. Možnost -server musí být prvním parametrem příkazového řádku.
K běžícímu procesu se můžete připojit například pomocí následující syntaxe.
ntsd -server ServerTransport -ddefer [-y UserSymbolPath] -p PID
Nebo můžete spustit nový proces jako cíl pomocí následující syntaxe.
ntsd -server ServerTransport -ddefer [-y UserSymbolPath] ApplicationName
Pokud instalujete tento program jako ladicí program postmortem, použili byste následující syntaxi. Všimněte si, že je nutné ručně editovat registr pro instalaci ladicího programu postmortem, který obsahuje parametr -server; podrobnosti najdete v tématu Povolení ladění postmortem.
ntsd -server ServerTransport -ddefer [-y UserSymbolPath]
Informace o dostupných možnostech přenosu naleznete v tématu Aktivace ladícího serveru.
Spusťte WinDbg nebo KD na hostitelském počítači, jako byste chtěli ladit cílový počítač, ale do cílového počítače se ve skutečnosti nepřipojujte. Pokud chcete použít WinDbg, použijte následující syntaxi.
windbg [-y KernelSymbolPath] [-k ConnectionOptions]
Další informace o tomto kroku naleznete v tématu Živé Kernel-Mode ladění pomocí WinDbg (Classic) .
.
Spusťte WinDbg nebo CDB jako klienta ladění se stejnými možnostmi přenosu, které se používají ke spuštění serveru. Tento klient ladění lze spustit buď na hostitelském počítači, nebo na třetím počítači.
cdb -remote ClientTransport
Další informace o tomto kroku naleznete v tématu Aktivace ladicího klienta.
Jakmile jsou ladicí programy spuštěné a v ladicím programu jádra se zobrazí výzva
Input>
, pomocí příkazu .sleep (Pozastavit ladicí program) pozastavte ladicí programy a nechte cílový počítač běžet několik sekund. Tím získáte čas cílového počítače ke zpracování protokolu vzdáleného přenosu a navázání připojení mezi vzdáleným serverem v uživatelském režimu a vzdáleným klientem.
Pokud používáte CDB jako ladicí program v uživatelském režimu, zůstane okno příkazového řádku přidružené k CDB uzamčené a nedostupné, dokud ladění pokračuje. Pokud používáte NTSD, není vytvořeno žádné další okno, i když ntSD má přidružené ID procesu v cílovém počítači.
Čtyři režimy a metody přepínání mezi nimi popsanými v tématu Přepínání režimů použít v tomto kombinovaném scénáři s následujícími rozdíly:
Existují dva různé režimy ladění uživatelského režimu. Když je cílový počítač spuštěný, ladicí server je řízen ladicím klientem jako při jakékoli jiné relaci vzdáleného ladění; to se nazývá ladění uživatelského režimu řízené na dálku. Když se ladicí program v režimu jádra přeruší na cílovém počítači a zobrazí se výzva
Input>
, je ladicí program v uživatelském režimu řízen ladicím programem jádra; to se nazývá ladění v uživatelském režimu řízeném jádrem.Tyto dva režimy nejsou nikdy k dispozici ve stejnou dobu. Pokud je ladicí program jádra v cílovém počítači přerušený, i když může být ladicí program v uživatelském režimu aktivní, cílový počítač nemůže zpracovat protokol vzdáleného přenosu, a proto ladicí program v uživatelském režimu nebude moct přijímat vzdálený vstup přes toto připojení.
Pokud jsou symboly uživatelského režimu umístěné na serveru symbolů, všechny příkazy ladicího programu, které vyžadují přístup ke symbolům, by se měly vydat v režimu ladění vzdáleného řízení uživatelského režimu.
Pokud chcete přepnout z ladění v uživatelském režimu řízeném jádrem na ladění v režimu vzdáleného řízení, použijte příkaz .sleep (Pozastavit ladicí program). Když se ladicí nástroj v uživatelském režimu probudí z příkazu spánku, bude v režimu vzdáleného ladění uživatelského módu.
Pokud chcete přepnout z ladění vzdáleného režimu uživatele na ladění v režimu jádra, zadejte libovolný příkaz z příkazového řádku
Input>
. Pokud tato výzva není viditelná, přepněte na ladění v režimu jádra a poté použijte na příkazovém řádkukd>
příkaz g (Go).
Ladicí program v uživatelském režimu spuštěný s -ddefer dává první prioritu vstupu z klienta ladění a druhou prioritu vstupu z ladicího programu jádra. Mezi souběžnými vstupy však nikdy nedochází ke konfliktu, protože když ladicí program jádra zasáhne cílový počítač, vzdálené připojení není k dispozici.