Udostępnij przez


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ą debugujesz. 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ę Debug>Windows>Wątki.

W tym artykule opisano, jak pracować z oknem wątków dla programów C#, Visual Basic lub C++. Jednak widok Wątki w oknie Stosy równoległe jest często bardziej przydatny do debugowania. Aby uzyskać więcej informacji, zobacz Debugowanie zakleszczenia przy użyciu widoku Wątki i Wyświetlanie wątków i zadań w oknie Stosy równoległe.

Eksplorowanie okna tabeli 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 tabeli okna 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 Flaga i usuń flagę z 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 zarysu strzałki w tej kolumnie wskazuje aktualny kontekst debugowania dla nieaktualnego wątku.
identyfikator Widoczny Zawiera numer identyfikacyjny dla każdego wątku.
zarządzany identyfikator 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ń 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 afinitetowej 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.
Wstrzymane Podliczenie Ukryty Zapewnia wstrzymaną liczbę. Ta liczba określa, czy wątek może działać. Aby uzyskać więcej informacji, zobacz wątki o zamrażaniu i rozmrażaniu .
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 na liście rozwijanej Kolumny jest wyświetlana lista 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 tabeli okien Wątki. Aby uzyskać więcej informacji, zobacz Oznacz i usuń oznaczenie 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 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 rozmraż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 liczba zawieszeń zmienia się podczas zamrażania lub rozmrażania wątku. Jeśli zablokujesz wątek w kodzie zarządzanym, jego liczba zawieszeń wynosi 1. W przypadku zablokowania wątku w kodzie natywnym liczba zawieszonych wartości wynosi 0, chyba że używasz 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.

Zmień wykonywanie dla 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 Odblokowanie wątków (zielona ikona odtwarzania). Akcja dotyczy tylko aktualnie wybranych wątków. Akcje zamrażania i rozmrażania są również dostępne w menu kontekstowym prawym przyciskiem myszy dla każdego wątku.

Zmienianie bieżącego wątku

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

Przełącz do innego wątku

Istnieją dwa sposoby, w jakie można przełączyć bieżący wątek w debugerze. 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 tabeli okien 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ć grupowanie z nagłówkami, takimi jak wątek roboczy lub nieoznaczone wątki. Obok każdego nagłówka grupy jest wyświetlana ikona strzałki rozwijania/zwijania.

Po zastosowaniu kryteriów grupowania widok tabeli okna wątków zostanie zaktualizowany, aby pokazać wątki należące do każdej grupy pod ich odpowiednimi nagłówkami. Użyj ikony strzałki do rozwijania/zwijania 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 tabeli okna 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 Grupa według.

Sortowanie wątków w tabeli

Sortowanie stosuje się do wątków w oknie tabeli Wątków, wybierając nagłówki kolumn w górnej części tabeli, takie jak Nazwa lub ID.

Po wybraniu nagłówka kolumny widok tabeli okna Wątki aktualizuje się, 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ątków, najpierw użyj listy rozwijanej Grupuj 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ątków wybierz pozycję Rozwiń grupy (podwójna ikona pudełka z symbolem plusa) lub Zwiń grupy (podwójna ikona pudełka z symbolem minusa).

Wyszukiwanie wątków

Można przeszukiwać wątki w tabeli okien Wątki i znaleźć określoną zawartość w dowolnej z widocznych kolumn. 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ątki wprowadź ciąg do wyszukania w polu Wyszukaj i naciśnij Enter. Możesz określić litery, cyfry i znaki specjalne, takie jak <, w ciągu znaków 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 i wybierz poprzednią frazę wyszukiwania.

Przeszukaj pełny stos wywołań

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

Aby uwzględnić pełny stos wywołań, wybierz opcję 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.

Wyświetl stos wywołań dla wątku

W tabeli okna 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).