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
Ikona | Kontrola | Opis |
---|---|---|
pole kombi ![]() |
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 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. |
![]() |
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 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 | Kontrola | Opis |
---|---|---|
pole kombi ![]() |
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 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. |
![]() |
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 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. |
![]() |
Zapisz kontrolkę | Umożliwia zapisywanie/eksportowanie zawartości z okna stosu równoległego jako obrazu. |
![]() |
Pokaż kontrolę kodu zewnętrznego | Za pomocą tej funkcji można wyświetlać/ukrywać stosy z zewnętrznego kodu/bibliotek. |
ikona podsumowania ![]() |
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 |
---|---|
![]() |
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. |
![]() |
Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona za każdym razem, gdy się pojawia. |
Ikona | Opis |
---|---|
![]() |
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. |
![]() |
Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona za każdym razem, gdy się pojawia. |
![]() |
Wskazuje, że bieżąca ramka stosu ma ostrzeżenie o stanie krytycznym, takim jak Zakleszczenie. |
![]() |
Wskazuje zakleszczonego węzła. |
![]() |
Wskazuje, że bieżąca ramka stosu zawiera dodatkowe informacje, takie jak oczekiwanie na, oczekiwanie na blokadę, własność przez, itp. |
![]() |
Wskazuje, że bieżące zadanie jest w stanie zablokowanym/oczekiwania itp. |
stan ![]() |
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ń .
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ń |
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. |
|
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. |
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ń |
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. |
|
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.
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.
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.
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.
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
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.
- zadania debugowania za pomocą okna stosów równoległych
- Debugowanie wątków za pomocą okna Stosy równoległe