Udostępnij za pośrednictwem


Wyświetlanie wątków w debugerze programu Visual Studio (C#, Visual Basic, C++)

Okno Wątki w debugerze programu Visual Studio umożliwia analizowanie i pracę z wątkami w aplikacji, którą debuggujesz. Okno zawiera funkcje grupowania, sortowania, flagi, blokowania, odmrożenia i wyszukiwania wątków w kodzie oraz wyświetlania stosów wywołań.

Okno Threads jest dostępne tylko wtedy, gdy debuger programu Visual Studio jest uruchomiony. Podczas sesji debugowania możesz otworzyć okno, wybierając pozycję Debugowanie>Windows>Wątki.

W tym artykule opisano, jak pracować z oknem wątków dla programów C#, Visual Basic lub C++. Jeśli szukasz szczegółowych wskazówek dotyczących korzystania z okna Wątki, zobacz Przewodnik: debugowanie przy użyciu okna Wątki.

Eksplorowanie tabeli w oknie 'Wątki'

Okno Wątki zawiera tabelę, w której każdy wiersz odpowiada oddzielnemu wątkowi w aplikacji. W widoku domyślnym tabela zawiera wszystkie wątki w aplikacji. Ustawienia tabeli można skonfigurować tak, aby pokazywały tylko interesujące Cię wątki. Tabela zawiera wiele kolumn opisujących szczegółowo wątki. Możesz dostosować umieszczanie kolumn i ukryć niepotrzebne kolumny.

W poniższej tabeli opisano wszystkie dostępne kolumny dla okna tabeli Wątki i wskazuje, czy kolumna jest widoczna, czy ukryta w widoku domyślnym. Kolumny są wyświetlane zgodnie z ich domyślną pozycją tabeli od lewej do prawej.

Kolumna Domyślny Opis
Flaga Widoczne, nieoznaczone Czerwone flagi w tej kolumnie wskazują wątki oznaczone na szczególną uwagę. Wybierz flagę (kolor ikony zmienia się na czerwony), aby oznaczyć lub usunąć znacznik (ikona zmienia się na kontur flagi) wątek. Kolorowa ikona flagi ułatwia odróżnienie oznaczonego wątku od innych wątków w tabeli. Aby uzyskać więcej informacji, zobacz Oznaczanie i cofanie oznaczeń wątków.
bieżący wątek Widoczne, nieoznaczone Żółta ikona strzałki w tej kolumnie wskazuje bieżący wątek w aplikacji uruchomionej w debugerze. Ikona konturu strzałki w tej kolumnie wskazuje bieżący kontekst debugera dla nieaktualnego wątku.
identyfikator Widoczny Zawiera numer identyfikacyjny dla każdego wątku.
Identyfikator zarządzany Widoczny Wyświetla zarządzane numery identyfikacyjne dla zarządzanych wątków.
Kategoria Widoczny Wskazuje kategorię wątków jako wątki interfejsu użytkownika, programy obsługi wywołań procedur zdalnych lub wątki procesu roboczego. Kategoria specjalna identyfikuje główny wątek aplikacji.
nazwa Widoczny Identyfikuje każdy wątek według jego nazwy lub <Brak nazwy>, jeśli wątek nie ma określonej nazwy. Gdy wątek już nie istnieje, wątek ma etykietę [Niszczenie wątku].
lokalizacja Widoczny Pokazuje, gdzie wątek jest uruchomiony w stosie wywołań aplikacji. Wybierz strzałkę listy rozwijanej, aby wyświetlić pełny stos wywołań dla wątku. Gdy wątek już nie istnieje, lokalizacja jest oznaczona jako <niedostępna>.
priorytet Ukryty Wyświetla priorytet lub pierwszeństwo przypisane przez system do każdego wątku.
maski koligacji Ukryty Przedstawia maskę koligacji procesora dla każdego wątku. W systemie wieloprocesorowym maska koligacji określa procesory, na których może działać wątek.
Zawieszony licznik Ukryty Podaje ilość zawieszonych. Ta liczba określa, czy wątek może działać. Aby uzyskać więcej informacji, zobacz Zamrażanie i rozmrażanie wątków.
nazwa procesu Ukryty Przedstawia proces, do którego należy każdy wątek. Dane w tej kolumnie mogą być przydatne podczas debugowania wielu procesów.
identyfikator procesu Ukryty Pokazuje identyfikator procesu, do którego należy każdy wątek.
kwalifikator transportu Ukryty Unikatowo identyfikuje maszynę, z którą jest połączony debuger.

Pokazywanie i ukrywanie kolumn tabeli

Na pasku narzędzi okna Wątki, lista rozwijana Kolumny pokazuje listę dostępnych kolumn. Rozwiń listę rozwijaną i wybierz nazwę kolumny, aby przełączyć jej widoczność w tabeli. Widoczne kolumny są oznaczone znacznikiem wyboru na liście.

Flaguj wątki ze szczególną uwagą

Użyj ikony flagi, aby oznaczyć wątki w celu uzyskania szczególnej uwagi. Oznaczone wątki są oznaczone czerwoną flagą w oknie tabeli Wątki. Aby uzyskać więcej informacji, zobacz flagowanie i usuwanie flag wątków.

Pokaż tylko oflagowane wątki

Możesz filtrować okno Wątki, aby wyświetlać tylko oflagowane wątki. Na pasku narzędzi okna wątków wybierz pozycję Pokaż tylko oflagowane wątki (ikona podwójnej flagi). Możesz również użyć skrótu klawiaturowego Ctrl + 9. Ta akcja jest dostępna tylko wtedy, gdy istnieją oznaczone wątki.

Zamrażanie i rozmrażanie wątków

W przypadku zablokowania wątku system nie uruchamia wykonywania wątku, nawet jeśli zasoby są dostępne.

W kodzie natywnym można wstrzymać lub wznowić wątki, wywołując funkcje systemu Windows SuspendThread i ResumeThread. Możesz również wywołać funkcje MFC CWinThread::SuspendThread i CWinThread::ResumeThread. Jeśli wywołasz funkcję SuspendThread lub ResumeThread, wstrzymana liczba wyświetlana w oknie Wątki zmieni się. Liczba zawieszonych wątków nie zmienia się, jeśli zamrażasz lub odmrażasz natywny wątek. Wątek nie może być wykonywany w kodzie natywnym, chyba że wątek jest rozmrażony i ma zawieszoną liczbę zera.

W kodzie zarządzanym licznik zawieszeń zmienia się podczas zamrażania lub rozmrażania wątku. Jeśli zamrozisz wątek w kodzie zarządzanym, jego licznik zawieszenia wynosi 1. Gdy zatrzymasz wątek w kodzie natywnym, jego liczba zawieszeń wynosi 0, chyba że użyjesz wywołania SuspendThread.

Notatka

Podczas debugowania wywołania z kodu natywnego do kodu zarządzanego kod zarządzany jest uruchamiany w tym samym wątku fizycznym co wywołujący kod natywny. Wstrzymanie lub zamrożenie wątku natywnego zawiesza również zarządzany kod.

Zmienianie wykonywania wybranych wątków

Można zablokować lub rozmrażyć wykonanie co najmniej jednego wątku. W oknie Wątki wybierz wątki, dla których chcesz zaktualizować stan wykonywania. Na pasku narzędzi okna wątków wybierz pozycję Blokowanie wątków (wstrzymywanie ikony odtwarzania) lub Thaw Threads (zielona ikona odtwarzania). Akcja dotyczy tylko aktualnie wybranych wątków. Akcje zamrożenia i odmrożenia są również dostępne w menu kontekstowym dostępne po kliknięciu prawym przyciskiem myszy dla każdego wątku.

Zmienianie bieżącego wątku

Ikona żółtej strzałki w tabeli okna Wątki wskazuje bieżący wątek (oraz lokalizację wskaźnika wykonywania). Oryginalny znacznik bieżącego wątku również pozostaje (widoczny jako ikona z konturem strzałki).

W oknie tabeli Wątki ikona żółtej strzałki wskazuje bieżący wątek (i miejsce wskaźnika wykonywania). Ikona zielonej strzałki z kręconym ogonem wskazuje, że wątek niebieżący ma bieżący kontekst debugera.

Przełącz do innego wątku

Można przełączać bieżący wątek w debugerze na dwa sposoby. Kliknij dwukrotnie dowolny wątek w tabeli okien Wątki, aby uczynić go bieżącym wątkiem. Możesz również kliknąć prawym przyciskiem myszy wątek i wybrać Przełącz do wątku.

Stosowanie grupowania i sortowania do wątków

Wątki można grupować w oknie tabeli Wątki, używając tych samych kryteriów co dostępne kolumny. Wszystkie kryteria są zawsze dostępne do grupowania, niezależnie od tego, czy odpowiednia kolumna jest widoczna w bieżącym widoku. Dla tabeli można wybrać tylko jedną grupę.

Podczas grupowania wątków nagłówek pojawia się w tabeli dla każdej grupy. Nagłówek zawiera opis grupy wraz z liczbą członków w grupie. Jeśli grupujesz według nazwy, możesz zobaczyć grupowania z nagłówkami jak wątek roboczy lub niezaznaczone wątki. Obok każdego nagłówka grupy jest wyświetlana ikona strzałki rozwijania/zwijania.

Po zastosowaniu kryteriów grupowania widok dla tabeli okien wątków zostanie zaktualizowany, aby wyświetlić wątki składowe dla każdej grupy pod nagłówkiem. Użyj ikony strzałki rozwijania/zwijania dla grupy, aby wyświetlić lub ukryć członków w bieżącym widoku.

Można również zastosować pojedyncze kryterium sortowania do wątków w oknie tabeli Wątki. Grupowanie ma pierwszeństwo przed sortowaniem. Można na przykład grupować wątki według Kategorii, a następnie sortować je według ID w ramach każdej Kategorii.

Grupowanie wątków w tabeli

Na pasku narzędzi okna wątków rozwiń listę rozwijaną Grupuj według i wybierz kryteria grupowania wątków. Możesz również usunąć zastosowane grupowanie, wybierając pozycję Brak na liście rozwijanej Grupuj według .

Sortowanie wątków w tabeli

Stosujesz sortowanie do wątków w tabeli okna wątków, wybierając nagłówki kolumn na górze tabeli, takie jak Nazwa lub ID.

Po wybraniu nagłówka kolumny widok w tabeli okna Threads zostanie zaktualizowany, aby pokazać wątki posortowane według wartości w wybranej kolumnie. Wybrana kolumna zawiera również ikonę strzałki w górę/w dół. Ikona strzałki w górę wskazuje sortowanie według wybranej kolumny w kolejności rosnącej. Ikona strzałki w dół wskazuje sortowanie według wybranej kolumny w kolejności malejącej. Wybierz nagłówek kolumny, aby zmienić kolejność sortowania.

Sortowanie wątków w grupach

Aby posortować wątki w grupach w oknie Wątki, najpierw użyj listy rozwijanej Grupa według , aby zastosować kryteria grupowania. Następnie wybierz nagłówek kolumny, aby posortować pogrupowane wątki według wartości w wybranej kolumnie.

Rozwiń lub zwiń wszystkie grupy

Istnieje szybki sposób wyświetlania lub ukrywania wszystkich grup w bieżącym widoku. Na pasku narzędzi okna Wątki wybierz Rozwiń grupy (ikona podwójnego pola z symbolem plus) lub Zwiń grupy (ikona podwójnego pola z symbolem minus).

Wyszukiwanie wątków

Możesz przeszukiwać wątki w oknie tabeli Wątki i szukać określonej zawartości w dowolnej z widocznych kolumn tabeli. Podczas wyszukiwania program Visual Studio wyświetla wiersze wątku zawierające dane kolumn zgodne z ciągiem wyszukiwania. Wyszukiwanie skanuje również lokalizację wątku wyświetlaną u góry stosu wywołań w kolumnie Location.

Wyszukiwanie określonej zawartości w wątkach

Istnieje kilka sposobów wyszukiwania wątków pod kątem określonej zawartości. Na pasku narzędzi okna wątków wprowadź ciąg do wyszukania w polu Wyszukaj i naciśnij klawisz Enter. Możesz określić litery, cyfry i znaki specjalne, takie jak < w swoim ciągu wyszukiwania. Po zakończeniu wyszukiwania w oknie Threads zostanie zaktualizowana tabela w celu wyświetlenia wątków z pasującymi wynikami. Program Visual Studio wyróżnia określone wystąpienia zgodne z ciągiem wyszukiwania. Aby powrócić do zwykłego widoku wątku, wybierz ikonę X obok pola Wyszukaj.

Możesz również wyszukać wcześniej wyszukiwany ciąg. Użyj pola rozwijanego Wyszukaj, aby wybrać wcześniejszy ciąg wyszukiwania.

Przeszukaj pełny stos wywołań

Domyślnie pełny stos wywołań nie jest przeszukiwany. Visual Studio wyszukuje dopasowania tylko w wątkach widocznych w oknie tabeli Threads.

Pełny stos wywołań można uwzględnić, wybierając pozycję Uwzględnij stosy wywołań w wyszukiwaniu (ikona elementu listy) na pasku narzędzi okna Wątki. Po włączeniu opcji ikona elementu listy ma obramowanie.

Wyświetlanie stosów wywołań i przełączanie między ramkami

W programie wielowątkowym każdy wątek ma własny stos wywołań. Okno wątków zapewnia wygodny sposób wyświetlania tych stosów.

Napiwek

Aby uzyskać wizualną reprezentację stosu wywołań dla każdego wątku, użyj okna Parallel Stacks.

Zobacz stos wywołań dla wątku

W oknie tabeli Wątki znajdź wątek, dla którego chcesz zbadać pełny stos wywołań. W kolumnie Lokalizacja wybierz strzałkę rozwijania/zwijania po lewej stronie lokalizacji wątku. Lokalizacja rozszerza się, aby wyświetlić pełny stos wywołań dla wątku. Ponownie wybierz strzałkę, aby wyświetlić tylko lokalizację.

Wyświetlanie lub zwijanie wszystkich stosów wywołań

Możesz kontrolować, czy okno Threads zawsze wyświetla pełne stosy wywołań dla wszystkich wątków w tabeli. Na pasku narzędzi okna wątków wybierz pozycję Rozwiń stosy wywołań (ikona pola z symbolem plus) lub Zwiń stosy wywołań (ikona pola z symbolem minus).