Debugowanie wielu procesów (C#, Visual Basic, C++)

Program Visual Studio może debugować rozwiązanie, które ma kilka procesów. Można uruchamiać i przełączać się między procesami, przerywać, kontynuować i przechodzić przez źródło, zatrzymać debugowanie i odłączyć się od poszczególnych procesów.

Rozpoczynanie debugowania przy użyciu wielu procesów

Jeśli więcej niż jeden projekt w rozwiązaniu programu Visual Studio może działać niezależnie, możesz wybrać, który projekt zostanie uruchomiony przez debuger. Bieżący projekt startowy jest wyświetlany pogrubioną w Eksplorator rozwiązań.

Aby zmienić projekt startowy, w Eksplorator rozwiązań kliknij prawym przyciskiem myszy inny projekt i wybierz polecenie Ustaw jako projekt startowy.

Aby rozpocząć debugowanie projektu z Eksplorator rozwiązań bez tworzenia projektu startowego, kliknij prawym przyciskiem myszy projekt i wybierz polecenie Debuguj>nowe wystąpienie lub Krok do nowego wystąpienia.

Aby ustawić projekt startowy lub wiele projektów z właściwości rozwiązania:

  1. Wybierz rozwiązanie w Eksplorator rozwiązań, a następnie wybierz ikonę Właściwości na pasku narzędzi lub kliknij rozwiązanie prawym przyciskiem myszy i wybierz polecenie Właściwości.

  2. Na stronie Właściwości wybierz pozycję Wspólny projekt startowy właściwości>.

    Changing the startup type for a project

  3. Wybierz pozycję Bieżący wybór, Pojedynczy projekt startowy i plik projektu lub Wiele projektów startowych.

    Jeśli wybierzesz pozycję Wiele projektów startowych, możesz zmienić kolejność uruchamiania i akcję do wykonania dla każdego projektu: Uruchamianie, Uruchamianie bez debugowania lub Brak.

  4. Wybierz pozycję Zastosuj lub OK , aby zastosować i zamknąć okno dialogowe.

Dołączanie do procesu

Debuger może również dołączać do aplikacji działających w procesach poza programem Visual Studio, w tym na urządzeniach zdalnych. Po dołączeniu do aplikacji możesz użyć debugera programu Visual Studio. Funkcje debugowania mogą być ograniczone. Zależy to od tego, czy aplikacja została skompilowana przy użyciu informacji debugowania, czy masz dostęp do kodu źródłowego aplikacji i czy kompilator JIT śledzi informacje debugowania.

Aby uzyskać więcej informacji, zobacz Dołączanie do uruchomionych procesów.

Aby dołączyć do uruchomionego procesu:

  1. Po uruchomieniu aplikacji wybierz pozycję Debuguj>dołączanie do procesu.

    Attach to Process dialog box

  2. W oknie dialogowym Dołączanie do procesu wybierz proces z listy Dostępne procesy, a następnie wybierz pozycję Dołącz.

Uwaga

Debuger nie dołącza automatycznie do procesu podrzędnego, który jest uruchamiany przez proces debugowany, nawet jeśli projekt podrzędny znajduje się w tym samym rozwiązaniu. Aby debugować proces podrzędny, dołącz do procesu podrzędnego po jego uruchomieniu lub skonfiguruj Edytor rejestru systemu Windows, aby uruchomić proces podrzędny w nowym wystąpieniu debugera.

Użyj Edytora rejestru, aby automatycznie uruchomić proces w debugerze

Czasami może być konieczne debugowanie kodu uruchamiania aplikacji uruchamianej przez inny proces. Przykłady obejmują usługi i niestandardowe akcje konfiguracji. Możesz uruchomić debuger i automatycznie dołączyć go do aplikacji.

  1. Uruchom Edytor rejestru systemu Windows, uruchamiając polecenie regedit.exe.

  2. W Edytorze rejestru przejdź do pozycji HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Opcje wykonywania pliku obrazu.

  3. Wybierz folder aplikacji, którą chcesz uruchomić w debugerze.

    Jeśli aplikacja nie znajduje się na liście jako folder podrzędny, kliknij prawym przyciskiem myszy pozycję Opcje wykonywania pliku obrazu, wybierz pozycję Nowy>klucz i wpisz nazwę aplikacji. Możesz też kliknąć prawym przyciskiem myszy nowy klucz w drzewie, wybrać polecenie Zmień nazwę, a następnie wprowadzić nazwę aplikacji.

  4. Kliknij prawym przyciskiem myszy nowy klucz w drzewie i wybierz pozycję Nowa>wartość ciągu.

  5. Zmień nazwę nowej wartości z New Value #1 na debugger.

  6. Kliknij prawym przyciskiem myszy debuger i wybierz polecenie Modyfikuj.

    Edit String dialog box

  7. W oknie dialogowym Edytowanie ciągu wpisz vsjitdebugger.exedane wartości, a następnie wybierz przycisk OK.

    Automatic debugger start entry in regedit.exe

Debugowanie za pomocą wielu procesów

Podczas debugowania aplikacji z kilkoma procesami przerywanie, wykonywanie kroków i kontynuowanie poleceń debugera domyślnie wpływa na wszystkie procesy. Na przykład w przypadku wstrzymania procesu w punkcie przerwania wykonywanie wszystkich innych procesów jest również zawieszone. Możesz zmienić to domyślne zachowanie, aby uzyskać większą kontrolę nad miejscami docelowymi poleceń wykonywania.

Aby zmienić, czy wszystkie procesy są zawieszone, gdy jeden proces ulegnie awarii:

  • W obszarze Narzędzia (lub Debugowanie)> Opcje>Debugowanie> ogólne zaznacz lub wyczyść pole wyboru Przerwij wszystkie procesy po przerwaniu jednego procesu.

Break, step, and continue commands (Przerywanie, krok i kontynuowanie poleceń)

W poniższej tabeli opisano zachowania poleceń debugowania, gdy pole wyboru Przerwij wszystkie procesy po przerwaniu jednego procesu jest zaznaczone lub zaznaczone:

Command Wybrano Zaznaczona
Debugowanie — przerywanie>wszystkich Wszystkie procesy przerywają. Wszystkie procesy przerywają.
Kontynuuj debugowanie> Wszystkie procesy są wznawiane. Wszystkie wstrzymane procesy są wznawiane.
Debugowanie>kroków, przechodzenie lub przechodzenie Wszystkie procesy są uruchamiane podczas bieżących kroków procesu.
Następnie wszystkie procesy przerywają.
Bieżące kroki procesu.
Wstrzymane procesy są wznawiane.
Uruchamianie procesów jest kontynuowane.
Debugowanie>kroku bieżącego procesu, przechodzenie do bieżącego procesu lub wyjmowanie bieżącego procesu Nie dotyczy Bieżące kroki procesu.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).
Punkt przerwania okna źródłowego Wszystkie procesy przerywają. Tylko podziały procesu okna źródłowego.
Okno źródłowe Uruchom do kursora
Okno źródłowe musi znajdować się w bieżącym procesie.
Wszystkie procesy są uruchamiane, gdy proces okna źródłowego jest uruchamiany do kursora, a następnie przerywa działanie.
Następnie wszystkie inne procesy przerywają.
Proces okna źródłowego jest uruchamiany do kursora.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).
Proces przerwania okna >procesów Nie dotyczy Wybrane podziały procesów.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).
Proces kontynuowania okna >procesów Nie dotyczy Wybrany proces jest wznawiany.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).

Znajdowanie plików źródłowych i symboli (.pdb)

Aby nawigować po kodzie źródłowym procesu, debuger musi mieć dostęp do plików źródłowych i plików symboli. Aby uzyskać więcej informacji, zobacz Określanie symboli (.pdb) i plików źródłowych.

Jeśli nie możesz uzyskać dostępu do plików dla procesu, możesz przejść za pomocą okna Dezasemblacji . Aby uzyskać więcej informacji, zobacz How to: Use the Disassembly window (Instrukcje: używanie okna dezasemblacji).

Przełączanie między procesami

Możesz dołączyć do wielu procesów podczas debugowania, ale tylko jeden proces jest aktywny w debugerze w danym momencie. Aktywny lub bieżący proces można ustawić na pasku narzędzi Lokalizacja debugowania lub w oknie Procesy . Aby przełączać się między procesami, oba procesy muszą być w trybie przerwania.

Aby ustawić bieżący proces na pasku narzędzi Lokalizacja debugowania:

  1. Aby otworzyć pasek narzędzi Lokalizacja debugowania, wybierz pozycję Wyświetl>paski narzędzi>Debuguj lokalizację.

  2. Podczas debugowania na pasku narzędzi Lokalizacja debugowania wybierz proces, który chcesz ustawić jako bieżący proces z listy rozwijanej Proces .

    Switch between processes

Aby ustawić bieżący proces w oknie Procesy:

  1. Aby otworzyć okno Procesy, podczas debugowania wybierz pozycję Debuguj>procesy systemu Windows.>

  2. W oknie Procesy bieżący proces jest oznaczony żółtą strzałką. Kliknij dwukrotnie proces, który chcesz ustawić jako bieżący proces.

    Processes window

Przełączenie do procesu ustawia go jako bieżący proces na potrzeby debugowania. Okna debugera pokazują stan bieżącego procesu, a polecenia krokowania mają wpływ tylko na bieżący proces.

Zatrzymywanie debugowania przy użyciu wielu procesów

Domyślnie po wybraniu pozycji Debuguj zatrzymaj>debugowanie debuger kończy się lub odłącza od wszystkich procesów.

  • Jeśli bieżący proces został uruchomiony w debugerze, proces zostanie zakończony.

  • Jeśli debuger został dołączony do bieżącego procesu, debuger odłącza się od procesu i opuszcza uruchomiony proces.

Jeśli rozpoczniesz debugowanie procesu z rozwiązania programu Visual Studio, dołącz go do innego procesu, który jest już uruchomiony, a następnie wybierz pozycję Zatrzymaj debugowanie, sesja debugowania zakończy się. Proces, który został uruchomiony w programie Visual Studio, kończy się, podczas gdy proces dołączony do niego działa.

Aby kontrolować sposób, w jaki zatrzymaj debugowanie wpływa na pojedynczy proces, w oknie Procesy kliknij prawym przyciskiem myszy proces, a następnie zaznacz lub wyczyść pole wyboru Odłącz po zatrzymaniu debugowania.

Uwaga

Przerwanie wszystkich procesów, gdy jeden proces przerywa opcję debugera, nie ma wpływu na zatrzymywanie, kończenie lub odłączanie od procesów.

Polecenia zatrzymywania, kończenie i odłączanie

W poniższej tabeli opisano zachowania poleceń zatrzymania, zakończenia i odłączania debugera z wieloma procesami:

Command Opis
Debugowanie, zatrzymywanie>debugowania O ile zachowanie nie zostanie zmienione w oknie Procesy , procesy uruchomione przez debuger zostaną zakończone, a dołączone procesy zostaną odłączone.
Debugowanie>kończy wszystko Wszystkie procesy zostaną zakończone.
Debugowanie>odłącz wszystkie Debuger odłącza się od wszystkich procesów.
Proces odłączania okna >procesów Debuger odłącza się od wybranego procesu.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).
Proces zakończenia okna >procesów Wybrany proces zostanie zakończony.
Inne procesy zachowują istniejący stan (zawieszone lub uruchomione).
Okno >Procesy Odłączanie po zatrzymaniu debugowania W przypadku wybrania opcji Debuguj zatrzymaj>debugowanie odłącza się od wybranego procesu.
Jeśli nie wybrano, debugowanie zatrzymaj>debugowanie kończy wybrany proces.