Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli aplikacja w trybie użytkownika jest już uruchomiona, debuger może debugować ją nieinwazyjnie. W przypadku debugowania nieinwazyjnego nie masz tylu działań debugowania. Można jednak zminimalizować ingerencję debugera w aplikację docelową. Debugowanie nieinwazyjne jest przydatne, jeśli aplikacja docelowa przestała odpowiadać.
Podczas debugowania nieinwazyjnego debuger w rzeczywistości nie jest dołączany do aplikacji docelowej. Debuger zawiesza wszystkie wątki obiektu docelowego i ma dostęp do pamięci, rejestrów i innych informacji. Jednak debuger nie może kontrolować obiektu docelowego, więc polecenia takie jak g (Go) nie działają.
Jeśli spróbujesz wykonać polecenia, które nie są dozwolone podczas debugowania nieinwazyjnego, zostanie wyświetlony komunikat o błędzie informujący o tym, że "Debuger nie jest dołączony, więc nie można monitorować wykonywania procesu".
Wybieranie procesu do debugowania
Aplikację docelową można określić za pomocą identyfikatora procesu (PID) lub nazwy procesu.
Jeśli określisz aplikację według nazwy, należy użyć pełnej nazwy procesu, w tym rozszerzenia nazwy pliku. Jeśli dwa procesy mają taką samą nazwę, należy zamiast tego użyć identyfikatora procesu.
Aby uzyskać więcej informacji na temat określania identyfikatora procesu i nazwy procesu, zobacz Znajdowanie identyfikatora procesu.
Aby uzyskać informacje na temat uruchamiania i zatrzymywania nieinwazyjnej sesji debugowania, zobacz następujące tematy:
- Debugowanie procesu User-Mode przy użyciu windbg
- Debugowanie procesu User-Mode przy użyciu usługi CDB
Wiersz polecenia CDB
Aby nieinwazyjnie debugować uruchomiony proces z poziomu wiersza polecenia CDB, określ opcję -pv, opcję -p oraz identyfikator procesu w następującej składni.
cdb -pv -pProcessID
Lub, aby nieinwazyjnie debugować uruchomiony proces, określając nazwę procesu, użyj następującej składni zamiast.
cdb -pv -pnProcessName
Istnieje kilka innych przydatnych opcji wiersza polecenia. Aby uzyskać więcej informacji na temat składni wiersza polecenia, zobacz CDB Command-Line Options (Opcje Command-Line CDB).
Wiersz polecenia WinDbg
Aby nieinwazyjnie debugować uruchomiony proces za pomocą wiersza polecenia WinDbg, określ opcję -pv, opcję -p i identyfikator procesu, używając następującej składni.
windbg -pv -pProcessID
Lub, aby nieinwazyjnie debugować uruchomiony proces, określając nazwę procesu, użyj następującej składni zamiast.
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.
WinDbg Menu
Gdy usługa WinDbg jest w trybie uśpienia, możesz niewzględnie debugować uruchomiony proces, klikając pozycję Dołącz do procesu w menu Plik lub naciskając F6.
Po pojawieniu się okna dialogowego Dołączanie do procesu, zaznacz pole wyboru Nieinwazyjne. Następnie wybierz wiersz zawierający żądany identyfikator procesu i nazwę. (Możesz również wprowadzić identyfikator procesu w polu Identyfikator procesu). Na koniec kliknij przycisk OK.
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ż inwazyjnie debuguje co najmniej jeden proces. Możesz użyć tego polecenia w debuggerze CDB, jeśli jest wyłączony, ale nie w wyłączonym WinDbg.
Jeśli polecenie .attach -v zakończy się pomyślnie, debugger debugguje wskazany proces przy następnym wydaniu polecenia wykonania. 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.
Rozpoczynanie sesji debugowania
Aby uzyskać więcej informacji na temat rozpoczynania sesji debugowania, zobacz Debugger Operation (Operacja debugera).