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.
- W kodzie zarządzanym widok Zadania przedstawia stosy wywołań System.Threading.Tasks.Task obiektów.
- W kodzie natywnym widok Zadania przedstawia stosy wywołań grup zadań, algorytmy równoległe, agentów asynchronicznych i uproszczone zadania.
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:
Ikona | Kontrolka | opis |
---|---|---|
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. | |
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. | |
Przełącz widok metody | Przełącza między widokami stosu wywołań i widokiem metody. Aby uzyskać więcej informacji, zobacz Widok metody. | |
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. | |
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ć. |
Ikona | Kontrolka | opis |
---|---|---|
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. | |
Kontrolka filtru | 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 procesora GPU i okno Obserwator równoległy. | |
Przełącz widok metody | Przełącza między widokami stosu wywołań i widokiem metody. Aby uzyskać więcej informacji, zobacz Widok metody. | |
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. | |
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ć. |
|
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. |
Ikony ramki stosu
Następujące ikony zawierają informacje o aktywnych i bieżących ramkach stosu we wszystkich widokach:
Icon | opis |
---|---|
Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku. | |
Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku innego niż bieżący. | |
Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona wszędzie tam, gdzie się pojawia. |
Icon | opis |
---|---|
Wskazuje bieżącą lokalizację (aktywną ramkę stosu) bieżącego wątku. | |
Wskazuje bieżącą lokalizację (aktywną ramkę stosu) wątku innego niż bieżący. | |
Wskazuje bieżącą ramkę stosu (bieżący kontekst debugera). Nazwa metody jest pogrubiona wszędzie tam, gdzie 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 blokadę, oczekiwanie na blokadę, własność itp. | |
Wskazuje, że bieżące zadanie jest w stanie zablokowanym/oczekiwania itp. | |
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ń.
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. |
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.
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.
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.
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.
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.
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.
- Debugowanie zadań za pomocą okna stosów równoległych
- Debugowanie wątków za pomocą okna stosów równoległych