Udostępnij przez


Debugowanie procesu User-Mode przy użyciu klasycznego windbg

Możesz użyć narzędzia WinDbg, aby dołączyć do działającego procesu lub utworzyć i dołączyć do nowego procesu.

Dołączanie do uruchomionego procesu

Istnieje kilka sposobów, w jakie można używać narzędzia WinDbg, aby dołączyć do uruchomionego procesu. Niezależnie od wybranej metody potrzebny będzie identyfikator procesu lub nazwa procesu. Identyfikator procesu jest liczbą przypisaną przez system operacyjny. Aby uzyskać więcej informacji na temat określania identyfikatora procesu i nazwy procesu, zobacz Znajdowanie identyfikatora procesu.

WinDbg Menu

Gdy WinDbg jest w trybie uśpienia, możesz dołączyć do uruchomionego procesu, wybierając pozycję Dołącz do procesu z menu Plik lub naciskając F6.

W oknie dialogowym Dołączanie do procesu wybierz proces, który chcesz debugować, a następnie wybierz pozycję OK.

Wiersz polecenia

W oknie wiersza polecenia można dołączyć do uruchomionego procesu podczas uruchamiania narzędzia WinDbg. Użyj jednego z następujących poleceń:

  • windbg -pProcessID
  • windbg -pnProcessName

gdzie ProcessID jest identyfikatorem procesu uruchomionego procesu lub ProcessName jest nazwą uruchomionego procesu.

Aby uzyskać więcej informacji na temat składni wiersza polecenia, zobacz WinDbg Command-Line Options.

Okno polecenia debugera

Jeśli WinDbg już debuguje co najmniej jeden proces, możesz dołączyć do uruchomionego procesu, używając polecenia .attach (Dołączanie do procesu) w oknie poleceń debuggera .

Debuger zawsze uruchamia wiele procesów docelowych jednocześnie, chyba że niektóre z ich wątków są zamrożone lub zawieszone.

Jeśli polecenie .attach zakończy się pomyślnie, debuger dołącza do określonego procesu przy następnym uruchomieniu polecenia wykonywania. Jeśli używasz tego polecenia kilka razy w wierszu, wykonanie musi być żądane przez debuger tyle razy, ile używasz tego polecenia.

Nieinwazyjne dołączanie do uruchomionego procesu

Jeśli chcesz debugować uruchomiony proces i ingerować tylko minimalnie w jego wykonywanie, powinieneś debugować proces nieinwazyjnie.

WinDbg Menu

Gdy WinDbg jest w trybie uśpienia, możesz nieinwazyjnie debugować uruchomiony proces, wybierając opcję Podłącz się do procesu z menu Plik lub naciskając F6.

Po wyświetleniu okna dialogowego Dołącz do procesu, zaznacz pole wyboru Bezinterwencyjne. Następnie wybierz wiersz zawierający żądany identyfikator procesu i nazwę. (Identyfikator procesu można również wprowadzić w polu Identyfikator procesu). Na koniec wybierz OK.

Wiersz polecenia

W oknie wiersza polecenia można dołączyć do uruchomionego procesu w nieinwazyjny sposób, gdy uruchamiasz WinDbg. Użyj jednego z następujących poleceń:

  • windbg -pv -pProcessID
  • windbg -pv -pnProcessName

Istnieje kilka innych przydatnych opcji wiersza polecenia. Aby uzyskać więcej informacji na temat składni wiersza polecenia, zobacz WinDbg Command-Line Options.

Okno polecenia debugera

Jeśli debuger jest już aktywny, możesz niewzględnie debugować uruchomiony proces przy użyciu .attach -v (Dołączanie do procesu) polecenia w oknie polecenia Debugger.

Możesz użyć polecenia .attach, jeśli debuger już debuguje co najmniej jeden proces inwazyjnie. Nie można użyć tego polecenia, jeśli usługa WinDbg jest uśpiona.

Jeśli polecenie .attach -v zakończy się pomyślnie, debuger debuguje określony proces przy następnym uruchomieniu polecenia wykonywania. Ponieważ wykonywanie nie jest dozwolone podczas debugowania nieinwazyjnego, debuger nie może jednocześnie nieinwazyjnie debugować więcej niż jednego procesu. To ograniczenie oznacza również, że użycie polecenia .attach -v może sprawić, że istniejąca inwazyjna sesja debugowania będzie mniej przydatna.

Uruchamianie nowego procesu

WinDbg może uruchomić aplikację w trybie użytkownika, a następnie debugować aplikację. Aplikacja jest wskazana nazwą. Debuger może również automatycznie dołączać do procesów podrzędnych (dodatkowe procesy uruchomione przez oryginalny proces docelowy).

Procesy, które debuger tworzy (znane również jako procesy uruchamiane), zachowują się nieco inaczej niż procesy, których debuger nie tworzy.

Zamiast używać standardowego interfejsu API sterty, procesy tworzone przez debuger używają specjalnego stosu debugowania. Możesz wymusić użycie standardowego sterta zamiast sterta debugowania przy użyciu _NO_DEBUG_HEAP zmiennej środowiskowej lub opcji wiersza polecenia -hd.

Ponadto, ponieważ aplikacja docelowa jest procesem podrzędnym debugera, dziedziczy uprawnienia debugera. To uprawnienie może umożliwić aplikacji docelowej wykonywanie pewnych akcji, których nie można wykonać w przeciwnym razie. Na przykład aplikacja docelowa może mieć wpływ na chronione procesy.

WinDbg Menu

Gdy WinDbg jest w trybie uśpienia, możesz uruchomić nowy proces, wybierając Otwórz plik wykonywalny z menu Plik lub naciskając CTRL+E.

Po wyświetleniu okna dialogowego Otwórz plik wykonywalny wprowadź pełną ścieżkę pliku wykonywalnego w polu nazwa pliku lub użyj listy Wyszukaj W, aby wybrać odpowiednią ścieżkę i nazwę pliku.

Jeśli chcesz użyć dowolnych parametrów wiersza polecenia dla aplikacji w trybie użytkownika, wprowadź je w polu Argumenty. Jeśli chcesz zmienić katalog początkowy z domyślnego, wprowadź ścieżkę do katalogu w polu Katalog startowy. Jeśli chcesz, aby WinDbg dołączał do procesów podrzędnych, zaznacz także pole wyboru Debugowanie procesów podrzędnych.

Po dokonaniu wyborów wybierz pozycję Otwórz.

Wiersz polecenia

W oknie wiersza polecenia można uruchomić nowy proces przy uruchamianiu narzędzia WinDbg. Użyj następującego polecenia:

windbg [-o]ProgramName[Argumenty]

Opcja -o powoduje dołączenie debugera do procesów podrzędnych. Istnieje kilka innych przydatnych opcji wiersza polecenia. Aby uzyskać więcej informacji na temat składni wiersza polecenia, zobacz WinDbg Command-Line Options.

Okno polecenia debugera

Jeśli WinDbg już debuguje co najmniej jeden proces, możesz utworzyć nowy proces przy użyciu polecenia .create (Utwórz proces) w oknie polecenia Debugger.

Debuger zawsze uruchamia wiele procesów docelowych jednocześnie, chyba że niektóre z ich wątków są zamrożone lub zawieszone.

Jeśli polecenie .create zakończy się pomyślnie, debuger tworzy określony proces przy następnym uruchomieniu polecenia wykonywania. Jeśli używasz tego polecenia kilka razy w wierszu, wykonanie musi być żądane przez debuger tyle razy, ile używasz tego polecenia.

Katalog początkowy aplikacji można kontrolować przy użyciu polecenia .createdir (Ustaw utworzony katalog przetwarzania) przed .create. Możesz użyć polecenia .createdir -I lub opcji wiersza poleceń -noinh do kontrolowania, czy aplikacja docelowa dziedziczy dojścia debugera.

Debugowanie procesów podrzędnych można aktywować lub dezaktywować przy użyciu polecenia.childdbg (Debugowanie procesów podrzędnych).

Ponowne podłączanie do procesu

Jeśli debuger przestanie odpowiadać lub zawiesza się, możesz dołączyć nowy debuger do procesu docelowego. Aby uzyskać więcej informacji na temat ponownego dołączania debugera w tej sytuacji, zobacz Ponowne dołączanie do aplikacji docelowej.