Udostępnij za pośrednictwem


Wyświetlanie wątków i zadań w oknie Stosy równoległe (C#, Visual Basic, C++)

Okno Parallel Stacks jest przydatne do debugowania aplikacji wielowątkowych. Ma kilka widoków:

  • Widok wątków pokazuje informacje o stosie wywołań dla wszystkich wątków w aplikacji. Możesz nawigować między wątkami i ramkami stosu w tych wątkach.

  • widok Zadań pokazuje informacje o stosie wywołań skoncentrowanych na zadaniach.

    • W kodzie zarządzanym widok Tasks pokazuje stosy wywołań obiektów System.Threading.Tasks.Task.
    • W kodzie natywnym widok Tasks pokazuje stosy wywołań grup zadań , algorytmy równoległe , agentów asynchronicznych i lekkich zadań .
  • Widok metody obraca stos wywołań wokół wybranej metody.

Użyj okna stosów równoległych

Aby otworzyć okno Parallel Stacks, musisz być w sesji debugowania. Wybierz pozycję Debug>Windows Parallel Stacks>.

Kontrolki paska narzędzi

Okno Parallel Stacks ma następujące kontrolki paska narzędzi:

zrzut ekranu przedstawiający pasek narzędzi w oknie Stosy równoległe.

Ikona Kontrola Opis
pole kombi Wątki/Zadania kombinowane pole Wątki/Zadania Przełącza widok między stosami wywołań wątków i stosami wywołań zadań. Aby uzyskać więcej informacji, zobacz widok zadań i widok wątków.
Pokaż tylko oflagowaną ikonę Pokaż tylko oflagowane Pokazuje stosy wywołań tylko dla wątków oflagowanych w innych oknach debugera, takich jak okno wątki GPU oraz okno Parallel Watch.
Ikona przełączania widoku metody Przełącz widok metody Przełącza się między widokami stosu wywołań i widokiem metody . Aby uzyskać więcej informacji, zobacz Method View.
Automatyczne przewijanie do bieżącej ikony Automatyczne przewijanie do bieżącej ramki stosu Automatycznie przewija wykres, aby bieżąca ramka stosu była widoczna. Ta funkcja jest przydatna w przypadku zmiany bieżącej ramki stosu z innych okien lub gdy napotkasz nowy punkt przerwania w dużych grafach.
ikona przełączania powiększenia Przełącz kontrolkę Powiększenia Wyświetla lub ukrywa kontrolkę powiększania po lewej stronie okna.

Niezależnie od widoczności kontrolki powiększenia, można także powiększać, naciskając Ctrl i obracając kółko myszy, lub naciskając Ctrl+Shift++, aby powiększyć obraz, oraz Ctrl+Shift+-, aby pomniejszyć obraz.

zrzut ekranu paska narzędzi w oknie stosów równoległych 2022.

Ikona Kontrola Opis
pole kombi Wątki/Zadania kombinowane pole Wątki/Zadania Przełącza widok między stosami wywołań wątków i stosami wywołań zadań. Aby uzyskać więcej informacji, zobacz widok zadań i widok wątków.
ikona filtru Filtr Kontrola Pokazuje stosy wywołań tylko dla określonego zestawu wątków, które cię interesują.
Pokaż tylko oflagowaną ikonę Pokaż tylko oflagowane Pokazuje stosy wywołań tylko dla wątków oflagowanych w innych oknach debugera, takich jak okno wątki GPU oraz okno Parallel Watch.
Ikona przełączania widoku metody Przełącz widok metody Przełącza się między widokami stosu wywołań i widokiem metody . Aby uzyskać więcej informacji, zobacz Method View.
Automatyczne przewijanie do bieżącej ikony Automatyczne przewijanie do bieżącej ramki stosu Automatycznie przewija wykres, aby bieżąca ramka stosu była widoczna. Ta funkcja jest przydatna w przypadku zmiany bieżącej ramki stosu z innych okien lub gdy napotkasz nowy punkt przerwania w dużych grafach.
ikona przełączania powiększenia Przełącz kontrolkę Powiększenia Wyświetla lub ukrywa kontrolkę powiększania po lewej stronie okna.

Niezależnie od widoczności kontrolki powiększenia, można także powiększać, naciskając Ctrl i obracając kółko myszy, lub naciskając Ctrl+Shift++, aby powiększyć obraz, oraz Ctrl+Shift+-, aby pomniejszyć obraz.
ikona wyszukiwania Kontrolka wyszukiwania Dzięki tej funkcji można łatwo przeszukiwać ramki stosu, a następnie używać strzałek do nawigowania między tymi wynikami.
Ikona Zapisz Zapisz kontrolkę Umożliwia zapisywanie/eksportowanie zawartości z okna stosu równoległego jako obrazu.
ikona kodu zewnętrznego Pokaż kontrolę kodu zewnętrznego Za pomocą tej funkcji można wyświetlać/ukrywać stosy z zewnętrznego kodu/bibliotek.
ikona podsumowania Copilot Podsumowywanie stosów wywołań Począwszy od programu Visual Studio 2022 w wersji 17.13 (wersja zapoznawcza 4), możesz wybrać opcję Podsumuj po zainstalowaniu i aktywowaniu Copilot. Ten przycisk otwiera okno czatu copilot, wstępnie załadowane z odpowiednim kontekstem wątku, umożliwiające eksplorowanie szczegółów, w tym stanów wątków, wywołań funkcji i sugerowanych poprawek.

Ikony ramki stosu

Następujące ikony dostarczają informacji o aktywnych i obecnych ramkach stosu we wszystkich widokach:

Ikona Opis
żółta strzałka Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku.
ikona wątków Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku, który nie jest aktualnym.
zielona strzałka Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona za każdym razem, gdy się pojawia.
Ikona Opis
żółta strzałka Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku.
ikona wątków Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku, który nie jest aktualnym.
zielona strzałka Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona za każdym razem, gdy się pojawia.
Błąd stanu Wskazuje, że bieżąca ramka stosu ma ostrzeżenie o stanie krytycznym, takim jak Zakleszczenie.
stan wykluczony Wskazuje zakleszczonego węzła.
Informacje o stanie Wskazuje, że bieżąca ramka stosu zawiera dodatkowe informacje, takie jak oczekiwanie na, oczekiwanie na blokadę, własność przez, itp.
stan zablokowany Wskazuje, że bieżące zadanie jest w stanie zablokowanym/oczekiwania itp.
stan uruchomiony Wskazuje aktualnie uruchomione zadanie.

Elementy menu kontekstowego

Poniższe elementy menu kontekstowego są dostępne po kliknięciu prawym przyciskiem myszy na metodzie w widoku wątków albo w widoku zadań. Ostatnich sześć elementów jest takich samych jak w oknie stosu wywołań .

zrzut ekranu przedstawiający menu skrótów w oknie Stosy Równoległe.

Pozycja menu Opis
Flaga Flaguje wybrany element.
Usuń oznaczenie Usuwa oznaczenie z wybranego elementu.
zamrożenie Blokuje wybrany element.
Odwilż Rozmraża wybrany element.
Przełącz do ramki Tak samo jak odpowiednie polecenie menu w oknie stosu wywołań . Jednak w oknie Parallel Stacks jedna metoda może znajdować się w kilku ramkach. Możesz wybrać odpowiednią ramkę w podmenu dla tego elementu. Jeśli jedna z ramek stosu znajduje się w bieżącym wątku, ta ramka jest automatycznie wybierana w podmenu.
Przejdź do zadania lub Przejdź do wątku Przełącza widok na Task lub Threads i utrzymuje podświetloną tę samą ramkę stosu.
przejdź do kodu źródłowego Przechodzi do odpowiedniej lokalizacji w oknie kodu źródłowego.
Przejdź do rozbiórki Przechodzi do odpowiedniej lokalizacji w oknie dezasemblacji .
Pokaż kodu zewnętrznego Wyświetla lub ukrywa kod zewnętrzny.
szesnastkowe wyświetlanie Przełącza między wyświetlaniem dziesiętnym i szesnastkowym.
Pokaż wątki w źródle Flaguje lokalizację wątku w oknie kodu źródłowego.
Informacje o załadowaniu symboli Otwiera okno dialogowe Informacje o ładowaniu symboli.
ustawienia symboli Otwiera okno dialogowe Ustawienia symboli.

zrzut ekranu przedstawiający menu skrótów w oknie Stosy równoległe 2022.

Pozycja menu Opis
Kopiuj Skopiuj wybrany element.
zaznacz wszystkie ramki poniżej Wybiera wszystkie ramki pod wybranym stosem.
Flaga Flaguje wybrany element.
Usuń oznaczenie Usuwa oznaczenie z wybranego elementu.
zamrożenie Blokuje wybrany element.
Odwilż Rozmraża wybrany element.
Przełącz do ramki Tak samo jak odpowiednie polecenie menu w oknie stosu wywołań . Jednak w oknie Parallel Stacks jedna metoda może znajdować się w kilku ramkach. Możesz wybrać odpowiednią ramkę w podmenu dla tego elementu. Jeśli jedna z ramek stosu znajduje się w bieżącym wątku, ta ramka jest automatycznie wybierana w podmenu.
Przejdź do zadania lub Przejdź do wątku Przełącza widok na Task lub Threads i utrzymuje podświetloną tę samą ramkę stosu.
przejdź do kodu źródłowego Przechodzi do odpowiedniej lokalizacji w oknie kodu źródłowego.
Przejdź do rozbiórki Przechodzi do odpowiedniej lokalizacji w oknie dezasemblacji .
Pokaż kodu zewnętrznego Wyświetla lub ukrywa kod zewnętrzny.
szesnastkowe wyświetlanie Przełącza między wyświetlaniem dziesiętnym i szesnastkowym.
Pokaż wątki w źródle Flaguje lokalizację wątku w oknie kodu źródłowego.
Informacje o załadowaniu symboli Otwiera okno dialogowe Informacje o ładowaniu symboli.
ustawienia symboli Otwiera okno dialogowe Ustawienia symboli.

Widok wątków

W widoku wątków ramka stosu i ścieżka wywołania bieżącego wątku są zaznaczone na niebiesko. Bieżąca lokalizacja wątku jest wyświetlana za pomocą żółtej strzałki.

Aby zmienić bieżącą ramkę stosu, kliknij dwukrotnie inną metodę. Może to również przełączyć bieżący wątek, w zależności od tego, czy wybrana metoda jest częścią bieżącego wątku, czy innego wątku.

Gdy wykres widoku wątków jest zbyt duży, aby zmieścić się w oknie, w oknie pojawi się kontrolka widoku z lotu ptaka . Możesz przenieść ramkę w kontrolce, aby przejść do różnych części grafu.

Na poniższej ilustracji przedstawiono jeden wątek przechodzący z Main do przejścia z kodu zarządzanego do kodu natywnego. W bieżącej metodzie znajdują się sześć wątków. Dwa wątki przechodzą do stanu uśpienia dzięki Thread.Sleep, dwa kontynuują wykonywanie Console.WriteLine, a bieżący wątek kontynuuje działanie z SyncTextWriter.WriteLine.

zrzut ekranu przedstawiający widok Wątki w oknie Stosy równoległe.

W poniższej tabeli opisano główne funkcje widoku wątków :

Objaśnienie Nazwa elementu Opis
1 Segment stosu wywołań lub węzeł Zawiera serię metod dla jednego lub więcej wątków. Jeśli ramka nie ma podłączonych linii strzałek, pokazuje całą ścieżkę wywołania dla wątku lub wątków.
2 Niebieskie wyróżnienie Wskazuje ścieżkę wywołania bieżącego wątku.
3 Linie strzałek Połącz węzły, aby utworzyć całą ścieżkę wywołania dla wątku (wątków).
4 Nagłówek węzła Przedstawia liczbę procesów i wątków dla węzła.
5 Metoda Reprezentuje jedną lub więcej ramek stosu w tej samej metodzie.
6 Etykietka narzędzia w metodzie Pojawia się po umieszczeniu wskaźnika myszy na metodzie. W widoku Wątki podpowiedź pokazuje wszystkie wątki w tabeli podobnej do okna Wątki.

Poniższa ilustracja przedstawia Główny wątek w przechodzeniu z kodu zarządzanego do natywnego. W bieżącej metodzie znajdują się pięć wątków. Cztery wątki kontynuują wykonywanie w kontekście metody S.C, podczas gdy jeden wątek roboczy przechodzi w przejściu z kodu zarządzanego do natywnego, ustawiając nazwę na wątku roboczym.

zrzut ekranu przedstawiający widok wątków w oknie Stosów równoległych 2022.

W poniższej tabeli opisano główne funkcje widoku wątków :

Objaśnienie Nazwa elementu Opis
1 Segment stosu wywołań lub węzeł Zawiera serię metod dla jednego lub więcej wątków. Jeśli ramka nie ma podłączonych linii strzałek, pokazuje całą ścieżkę wywołania dla wątku lub wątków.
2 Niebieskie wyróżnienie Wskazuje ścieżkę wywołania bieżącego wątku.
3 Linie strzałek Połącz węzły, aby utworzyć całą ścieżkę wywołania dla wątku (wątków).
4 Nagłówek węzła Przedstawia liczbę procesów/wątków, nazwę wątku i identyfikator wątku dla węzła.
5 Metoda Reprezentuje jedną lub więcej ramek stosu w tej samej metodzie.
6 Etykietka narzędzia w metodzie Pojawia się po umieszczeniu wskaźnika myszy na metodzie. W widoku Wątki podpowiedź pokazuje wszystkie wątki w tabeli podobnej do okna Wątki.
7 Opis wątku Wygenerowany przez sztuczną inteligencję opis wątku. Począwszy od programu Visual Studio 2022 w wersji 17.13 (wersja zapoznawcza 1), ten opis jest obecny, gdy Copilot jest zainstalowany i aktywowany.

Widok zadań

Jeśli aplikacja używa obiektów System.Threading.Tasks.Task (kodu zarządzanego) lub obiektów task_handle (kodu natywnego) do wyrażania równoległości, możesz użyć widoku Tasks. Zadania widok pokazuje stosy wywołań zadań zamiast wątków.

W widoku Tasks:

  • Nie są wyświetlane stosy wywołań wątków, które nie wykonują zadań.
  • Stosy wywołań wątków wykonujących zadania są wizualnie przycinane na górze i na dole, aby pokazać najbardziej odpowiednie kroki dla zadań.
  • Gdy w jednym wątku znajdują się kilka zadań, stosy wywołań tych zadań są wyświetlane w oddzielnych węzłach.

Aby zobaczyć cały stos wywołań, wróć do widoku Wątki , klikając prawym przyciskiem myszy na ramkę stosu i wybierając polecenie Przejdź do wątku.

Na poniższej ilustracji pokazano widok Wątki u góry i odpowiedni widok Zadania u dołu.

Zrzut ekranu przedstawiający widoki Wątków i Zadań.

Najedź kursorem na metodę, aby wyświetlić podpowiedź z dodatkowymi informacjami. W widoku zadań , podpowiedź wyświetla wszystkie zadania w tabeli podobnej do okna zadań .

Na poniższej ilustracji przedstawiono etykietkę narzędzia dla metody w widoku wątków u góry oraz dla odpowiedniego widoku zadań u dołu.

Zrzut ekranu przedstawiający etykietki narzędzi Wątki i Zadania.

Widok metody

W widoku Wątki lub Zadania widoku można przełączyć wykres w bieżącej metodzie, wybierając ikonę Przełącz widok metody na pasku narzędzi. Widok metody od razu pokazuje wszystkie metody we wszystkich wątkach, które są wywoływane przez bieżącą metodę lub ją wywołują. Na poniższej ilustracji przedstawiono wygląd tych samych informacji w widoku Threads po lewej stronie i w widoku metody po prawej stronie.

Jeśli przełączysz się do nowej ramki stosu, ustawisz tę metodę jako bieżącą metodę, a Widok metody wyświetli wszystkie wywołania i wywołania dla nowej metody. Może to spowodować, że niektóre wątki pojawią się lub znikną z widoku, w zależności od tego, czy ta metoda pojawia się na ich stosach wywołań. Aby powrócić do widoku stosu wywołań, ponownie wybierz ikonę paska narzędzi Widok metod.

Samouczek wideo dotyczący debugowania wątków i zadań za pomocą stosów równoległych

W tych samouczkach wideo pokazano, jak używać widoków Wątki i Zadania okna Stosy równoległe w programie Visual Studio 2022 do debugowania wielowątkowych aplikacji.