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

Okno Stosy równoległe jest przydatne do debugowania aplikacji wielowątkowych. Ma kilka widoków:

  • Widok wątków zawiera 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 Zadania zawiera informacje o stosie wywołań skoncentrowanych na zadaniach.

  • Widok metody przestawia stos wywołań w wybranej metodzie.

Korzystanie z okna stosów równoległych

Aby otworzyć okno Stosy równoległe , musisz być w sesji debugowania. Wybierz pozycję Debuguj>stosy równoległe systemu Windows.>

Kontrolki paska narzędzi

W oknie Stosy równoległe są następujące kontrolki paska narzędzi:

Screenshot of Toolbar in Parallel Stacks window.

Ikona Kontrolka opis
Threads/Tasks combo box Pole kombi Zadania wątków/ 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.
Show Only Flagged icon Pokaż tylko oflagowane Pokazuje stosy wywołań tylko dla wątków oflagowanych w innych oknach debugera, takich jak okno Wątki procesora GPU i okno Obserwator równoległy.
Toggle Method View icon Przełącz widok metody Przełącza między widokami stosu wywołań i widokiem metody. Aby uzyskać więcej informacji, zobacz Widok metody.
Auto Scroll to Current icon Automatyczne przewijanie do bieżącej ramki stosu Automatycznie wyrejestruje wykres, tak aby bieżąca ramka stosu był w widoku. Ta funkcja jest przydatna w przypadku zmiany bieżącej ramki stosu z innych okien lub trafienia nowego punktu przerwania w dużych grafach.
Toggle Zoom icon 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 również powiększać, naciskając klawisze Ctrl i obracając kółko myszy, lub naciskając klawisze Ctrl+ Shift++, aby powiększyć i Ctrl+Shift+-, aby powiększyć.

Screenshot of Toolbar in Parallel Stacks window 2022.

Ikona Kontrolka opis
Threads/Tasks combo box Pole kombi Zadania wątków/ 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.
Filter icon Kontrolka filtru Pokazuje stosy wywołań tylko dla określonego zestawu wątków, które cię interesują.
Show Only Flagged icon Pokaż tylko oflagowane Pokazuje stosy wywołań tylko dla wątków oflagowanych w innych oknach debugera, takich jak okno Wątki procesora GPU i okno Obserwator równoległy.
Toggle Method View icon Przełącz widok metody Przełącza między widokami stosu wywołań i widokiem metody. Aby uzyskać więcej informacji, zobacz Widok metody.
Auto Scroll to Current icon Automatyczne przewijanie do bieżącej ramki stosu Automatycznie wyrejestruje wykres, tak aby bieżąca ramka stosu był w widoku. Ta funkcja jest przydatna w przypadku zmiany bieżącej ramki stosu z innych okien lub trafienia nowego punktu przerwania w dużych grafach.
Toggle Zoom icon 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 również powiększać, naciskając klawisze Ctrl i obracając kółko myszy, lub naciskając klawisze Ctrl+ Shift++, aby powiększyć i Ctrl+Shift+-, aby powiększyć.
Search icon 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.
Save icon Zapisz kontrolkę Umożliwia zapisywanie/eksportowanie zawartości z okna stosu równoległego jako obrazu.
External Code icon Pokaż kontrolę kodu zewnętrznego Za pomocą tej funkcji można wyświetlać/ukrywać stosy z zewnętrznego kodu/bibliotek.

Ikony ramki stosu

Następujące ikony zawierają informacje o aktywnych i bieżących ramkach stosu we wszystkich widokach:

Icon opis
Yellow arrow Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku.
Threads icon Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku innego niż bieżący.
Green arrow Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona wszędzie tam, gdzie się pojawia.
Icon opis
Yellow arrow Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku.
Threads icon Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku innego niż bieżący.
Green arrow Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona wszędzie tam, gdzie się pojawia.
Status Error Wskazuje, że bieżąca ramka stosu ma ostrzeżenie o stanie krytycznym, takim jak Zakleszczenie.
Status Excluded Wskazuje zakleszczonego węzła.
Status Information Wskazuje, że bieżąca ramka stosu zawiera dodatkowe informacje, takie jak oczekiwanie na blokadę, oczekiwanie na blokadę, własność itp.
Status Blocked Wskazuje, że bieżące zadanie jest w stanie zablokowanym/oczekiwania itp.
Status Running Wskazuje, że aktualnie uruchomione zadanie.

Elementy menu kontekstowego

Poniższe elementy menu skrótów są dostępne po kliknięciu prawym przyciskiem myszy metody w widoku Wątki lub widoku Zadania . Ostatnie sześć elementów jest takich samych jak w oknie stosu wywołań.

Screenshot of Shortcut menu in Parallel Stacks window.

Element menu opis
Flaga Flaguje wybrany element.
Unflag Anuluje opóźnienie wybranego elementu.
Zamrozić Blokuje wybrany element.
Odblokować Rozmraża wybrany element.
Przełącz na ramkę Tak samo jak odpowiednie polecenie menu w oknie Stos wywołań . Jednak w oknie Stosy równoległe 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 domyślnie zaznaczona w podmenu.
Przejdź do zadania lub przejdź do wątku Przełącza się do widoku Zadania lub Wątki i utrzymuje tę samą ramkę stosu.
Przejdź do kodu źródłowego Przechodzi do odpowiedniej lokalizacji w oknie kodu źródłowego.
Przejdź do dezasemblacji Przechodzi do odpowiedniej lokalizacji w oknie Dezasemblacji .
Pokaż kod zewnętrzny Wyświetla lub ukrywa kod zewnętrzny.
Wyświetlacz szesnastkowy Przełącza między wyświetlaniem dziesiętnych i szesnastkowym.
Pokaż wątki w źródle Flaguje lokalizację wątku w oknie kodu źródłowego.
Informacje o ładowaniu symboli Otwiera okno dialogowe Informacje o ładowaniu symboli.
Ustawienia symboli Otwiera okno dialogowe Ustawienia symboli.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

Element menu opis
kopia Skopiuj wybrany element.
Zaznacz wszystkie ramki poniżej Wybiera wszystkie ramki pod wybranym stosem.
Flaga Flaguje wybrany element.
Unflag Anuluje opóźnienie wybranego elementu.
Zamrozić Blokuje wybrany element.
Odblokować Rozmraża wybrany element.
Przełącz na ramkę Tak samo jak odpowiednie polecenie menu w oknie Stos wywołań . Jednak w oknie Stosy równoległe 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 domyślnie zaznaczona w podmenu.
Przejdź do zadania lub przejdź do wątku Przełącza się do widoku Zadania lub Wątki i utrzymuje tę samą ramkę stosu.
Przejdź do kodu źródłowego Przechodzi do odpowiedniej lokalizacji w oknie kodu źródłowego.
Przejdź do dezasemblacji Przechodzi do odpowiedniej lokalizacji w oknie Dezasemblacji .
Pokaż kod zewnętrzny Wyświetla lub ukrywa kod zewnętrzny.
Wyświetlacz szesnastkowy Przełącza między wyświetlaniem dziesiętnych i szesnastkowym.
Pokaż wątki w źródle Flaguje lokalizację wątku w oknie kodu źródłowego.
Informacje o ładowaniu symboli Otwiera okno dialogowe Informacje o ładowaniu symboli.
Ustawienia symboli Otwiera okno dialogowe Ustawienia symboli.

Widok wątków

W widoku Wątki ramka stosu i ścieżka wywołania bieżącego wątku są wyróżnione kolorem niebieskim. 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ątki jest zbyt duży, aby zmieścić się w oknie, w oknie zostanie wyświetlona kontrolka Widok oka 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 kodu zarządzanego na natywny. W bieżącej metodzie znajdują się sześć wątków. Jeden z nich nadal ma wartość Thread.Sleep, a drugi kontynuuje ciąg Console.WriteLine, a następnie do elementu SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

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

Wywołanie Nazwa elementu opis
1 Segment stosu wywołań lub węzeł Zawiera serię metod dla co najmniej jednego wątku. Jeśli ramka nie ma podłączonych linii strzałek, ramka pokazuje całą ścieżkę wywołania dla wątków.
2 Niebieskie wyróżnienie Wskazuje ścieżkę wywołania bieżącego wątku.
3 Linie strzałek Połączenie węzłów, aby utworzyć całą ścieżkę wywołania dla wątków.
100 Nagłówek węzła Przedstawia liczbę procesów i wątków dla węzła.
5 Method 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 etykietka narzędzia zawiera wszystkie wątki w tabeli podobnej do okna Wątki .

Na poniższej ilustracji przedstawiono jeden wątek przechodzący z main do przejścia kodu zarządzanego na natywny. W bieżącej metodzie znajdują się pięć wątków. Jeden z nich kontynuuje ciąg ServerClass.InstanceMethod, a drugi kontynuuje ciąg Worker.Thread.Start, a następnie do pliku StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

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

Wywołanie Nazwa elementu opis
1 Segment stosu wywołań lub węzeł Zawiera serię metod dla co najmniej jednego wątku. Jeśli ramka nie ma podłączonych linii strzałek, ramka pokazuje całą ścieżkę wywołania dla wątków.
2 Niebieskie wyróżnienie Wskazuje ścieżkę wywołania bieżącego wątku.
3 Linie strzałek Połączenie węzłów, aby utworzyć całą ścieżkę wywołania dla wątków.
100 Nagłówek węzła Przedstawia liczbę procesów/wątków, nazwę wątku i identyfikator wątku dla węzła.
5 Method 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 etykietka narzędzia zawiera wszystkie wątki w tabeli podobnej do okna Wątki .

Widok zadań

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

W widoku Zadania :

  • Nie są wyświetlane stosy wywołań wątków, które nie są uruchomione.
  • Stosy wywołań wątków, które są uruchamiane zadania, są wizualnie przycinane u góry i dołu, aby pokazać najbardziej odpowiednie ramki 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 wyświetlić cały stos wywołań, wróć do widoku Wątki , klikając prawym przyciskiem myszy ramkę stosu i wybierając polecenie Przejdź do wątku.

Na poniższej ilustracji przedstawiono widok Wątki u góry i odpowiadający mu widok Zadania u dołu.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

Umieść kursor na metodzie, aby wyświetlić etykietkę narzędzia z dodatkowymi informacjami. W widoku Zadania etykietka narzędzia zawiera wszystkie zadania w tabeli podobnej do okna Zadania .

Na poniższej ilustracji przedstawiono etykietkę narzędzia dla metody w widoku Wątki u góry i dla odpowiedniego widoku Zadania u dołu.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Widok metody

W widoku Wątki lub w widoku Zadania możesz przełączyć wykres w bieżącej metodzie, wybierając ikonę Przełącz widok metody na pasku narzędzi. Widok metody przedstawia na pierwszy rzut oka wszystkie metody we wszystkich wątkach, które wywołuje lub są wywoływane przez bieżącą metodę. Poniższa ilustracja przedstawia wygląd tych samych informacji w widoku Wątki po lewej stronie i w widoku metody po prawej stronie.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

Jeśli przejdziesz do nowej ramki stosu, ustawisz tę metodę jako bieżącą metodę, a w widoku metody są wyświetlane wszystkie wywołania i wywoływane 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 metody.

Samouczek 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 w celu debugowania wielowątków aplikacji.