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.
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).