Wątki i procesy to pojęcia pokrewne w dziedzinie informatyki.Oba reprezentują sekwencje instrukcji, które muszą być wykonywane w określonej kolejności.Instrukcje w oddzielnych wątkach lub procesach można jednak wykonać równolegle.
Procesy istnieją w systemie operacyjnym i odpowiadają temu, co użytkownicy widzą jako programy lub aplikacje.Wątek istnieje w ramach procesu.Z tego powodu wątki są czasami nazywane procesami lekkimi.Każdy proces składa się z jednego lub więcej wątków.
Istnienie wielu procesów umożliwia komputerowi wykonywanie więcej niż jednego zadania na raz.Istnienie wielu wątków umożliwia procesowi oddzielenie pracy, która ma zostać wykonana równolegle.Na komputerze z komputerów wieloprocesorowych, procesy i wątki można uruchomić na różnych procesorach.Pozwala to na prawdziwe przetwarzanie równoległe.
Doskonałe przetwarzania równoległe nie zawsze jest możliwe.Wątki czasami muszą być synchronizowane.Jeden wątek być może będzie musiał poczekac na wynik z innego wątku, lub jeden wątek wymaga wyłącznego dostępu do zasobu, który używa innego wątku.Problemy z synchronizacją są typową przyczyną błędów w aplikacjach wielowątkowych.Czasami wątki mogą kończyć się, oczekując na zasób, który nigdy nie stanie się dostępny.Skutkuje to warunkiem o nazwie zakleszczenie.
Debuger programu Visual Studio zapewnia zaawansowane, ale łatwe w obsłudze narzędzia do debugowania wątków i procesów.
Narzędzia do debugowania wątków i procesów w programie Visual Studio
Podstawowe narzędzia do pracy z procesami w programie Visual Studio to okno dialogowe Dołączanie do procesu, okno Procesy i pasek narzędzi Lokalizacja debugowania.Podstawowe narzędzia do debugowania wątków to okno Wątki, znaczniki wątków w oknach źródłowych i pasek narzędzi Lokalizacja debugowania.
Podstawowe narzędzia do debugowania aplikacji wielowątkowych to okna Stosy równoległe i Zadania równoległe oraz Równoległa czujka i Wątki GPU.
W następującej tabeli przedstawiono dostępne informacje i czynności, które można wykonywać w każdym z tych miejsc:
Interfejs użytkownika
Dostępne informacje
Akcje, które może przeprowadzać użytkownik
Okno dialogowe Dołącz do procesu
Dostępne procesy, które możesz dołączyć do:
Nazwa procesu (.exe)
Numer identyfikacyjny ID procesu
Tytuł paska menu
Typ (Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)
Nazwa użytkownika (nazwa konta)
Numer sesji
Wybierz proces, do którego chcesz się dołączyć
Wybierz komputer zdalny
Zmień typ transportu dla łączenia się z komputerami zdalnymi
Okno Procesy
Dołączone procesy:
Nazwa procesu
Numer identyfikacyjny ID procesu
Ścieżka do przetwarzania .exe
Tytuł paska menu
Stan (przerwanie.Uruchamianie)
Debugowanie (w trybie macierzystym, zarządzane itd.)
Typ transportu (ustawienie domyślne, natywnie bez uwierzytelnienia)
Flagowanie wątku dla przeprowadzenia dodatkowych badań
Usuń flagę wątku
Zmień nazwę wątku
Pokazywanie i ukrywanie wątków
Inne działania:
Wyświetl stos wywołań wątku w DataTip
Okno źródłowe
Wskaźniki wątku na lewym marginesie na oprawę wskazują jeden lub wielu wątków (wyłączone domyślnie, włączone za pomocą menu skrótów w oknie Wątki).
Menu skrótów:
Przełączanie do wątku
Flagowanie wątku dla przeprowadzenia dodatkowych badań
Usuń flagę wątku
Lokalizacja debugowania - Pasek narzędzi
Bieżący proces
Pokazywanie miniatury aplikacji
Wstrzymywanie aplikacji
Wznów aplikację
Wstrzymywanie i zamykanie aplikacji
Bieżący wątek
Przełączanie bieżącego stanu flagi wątku
Pokazywanie tylko wątków oflagowanych
Pokazywanie tylko bieżącego procesu
Ramka bieżącego stosu
Przełączanie do innego procesu
Wstrzymywanie, wznawianie działania lub zamykanie aplikacji
Przełączanie do innego wątku w bieżącym procesie
Przełączanie do innej ramki stosu w bieżącym wątku
Flagowanie bieżących wątków lub usuwanie z nich flagi
Pokazywanie tylko wątków oflagowanych
Pokazywanie tylko bieżącego procesu
Okno Stosów równoległych
Wywołaj stosy dla wielu wątków w jednym oknie.
Ramka aktywnego stosu dla każdego wątku.
Obiekty wywołujące i wywoływane dla dowolnej metody.
Odfiltruj określone wątki
Przełączanie do widoku zadań równoległych
Flagowanie wątku lub usuwanie z niego flagi
Powiększenie
Okno Zadań równoległych
Wyświetlanie informacji o obiektach Task, w tym o identyfikatorze zadania, stanie zadania (według harmonogramu, pracy, oczekujące, zakleszczone) i wątku, który jest przydzielony do zadania.
Bieżąca lokalizacja w stosie wywołania.
Obiekt delegowany przekazany do zadania w czasie jego tworzenia
Przełączanie do bieżącego zadania
Flagowanie zadania lub usuwanie z niego flagi
Blokowanie lub odblokowywanie zadania
OknoRównoległa czujka
Kolumna flagi, w której można oznaczyć wątek, na który chcesz zwrócić szczególną uwagę.
Kolumna ramki, w której strzałka wskazuje wybraną ramkę.
Konfigurowalna kolumna, która może wyświetlać maszynę, proces, fragment, zadanie i wątek.
Flagowanie wątku lub usuwanie z niego flagi
Pokazuj tylko wątki oflagowane
Przełączanie ramek
Sortowanie kolumny
Grupowanie wątków
Blokowanie lub odblokowywanie wątków
eksportowanie danych w oknie czujki równoległej
Okno wątków GPU
Kolumna flagi, w której można oznaczyć wątek, na który chcesz zwrócić szczególną uwagę.
Kolumna aktywnego wątku, w której żółta strzałka wskazuje aktywny wątek.Strzałka wskazuje wątek, w którym wykonanie przerwało pracę debugera.
Kolumna Liczba wątków, która wyświetla liczbę wątków w tej samej lokalizacji.
Kolumna Wiersz wyświetlająca wiersz kodu, w którym znajduje się każda grupa wątków.
Kolumna Adres wyświetlająca adres instrukcji, pod którym znajduje się każda grupa wątków.
Kolumna Lokalizacja, która jest lokalizacją w kodzie adresu.
Kolumna Stan, która wskazuje, czy wątek jest aktywny, czy zablokowany.
Kolumna Kafelek, która zawiera indeks kafelka dla wątków w wierszu.