Mam aplikację z 4 wątkami działającymi w tym samym kodzie. Jednak, gdy go przeskakuję, przeskakuję pomiędzy różnymi wątkami. Jak mogę zablokować go do jednego wątku, aby inne wątki były ignorowane do debugowania?Visual Studio, debugowanie jednego z wielu wątków
Odpowiedz
Tak.
W oknie wątków (Debuguj -> Windows -> Tematy) kliknij prawym przyciskiem myszy żądany wątek i wybierz "przełącz na wątek".
Możesz także wybrać "zamrożenie" na wątkach, których nie chcesz debugować, aby nie były uruchomione. Nie zapomnij ich "odtajać", jeśli oczekujesz od nich wykonywania pracy.
I Jestem zdezorientowany. Czy odpowiedź brzmi "nie da się zrobić?" Pytanie pyta, jak zostać zablokowanym na określony wątek, aby debugger nie przeskakiwał między nimi. Przejście do wątku jest w porządku, ale gdy tylko inny wątek coś zrobi, wtedy debugger przeskakuje do niego. Jeśli nie mogę zatrzymać drugiego wątku, ponieważ musi on coś zrobić, to w jaki sposób mam pozostać zablokowany tylko w wątku, który mnie interesuje? – bubbleking
Incomeplete: | musisz zawsze klikać przełącznik, za każdym razem, gdy coś się stanie – deadManN
Można również umieścić warunkową przerwania w kodzie i umieścić thread.Id == [someValue]
lub Thread.Name == "[Somename]"
w stanie punktu przerwania ...
Dzięki Charles, to było pomocne (nie wiedziałem, że możesz to zrobić). Jednak najbardziej efektywnym sposobem debugowania jest ten, który napisał Jeff, ponieważ nie znam nazwy zanim trafi w punkt przerwania i widzi pewne wartości. –
Ten silnie przypomina bardzo podobny problem w programie Visual Studio 2008 SP1. Zostało to naprawione za pomocą poprawki po SP. Ale są też inne dowody na to, że poprawka nie została włączona do bazy kodu, ten problem dotyczył także tego feedback item. To nie jest tak niezwykłe, że poprawki nie zostaną zintegrowane z powrotem.
Brak elementu opinii, który dokładnie opisuje Twój problem, przynajmniej taki, jaki mogę znaleźć. Zaleciłbym, abyś to zrobił. Biorąc pod uwagę zwykłe problemy z reprodukcją takich błędów, zdecydowanie zalecam uwzględnienie projektu reprodukcji, który wykazuje ten problem wraz z instrukcjami, jak odtworzyć problem.
Istnieje obejście tego problemu, możesz przejść do Debug + Windows + Threads, kliknąć prawym przyciskiem myszy wątki, których nie chcesz debugować, i wybrać Zablokuj. Nie zapomnij później ich rozmrozić.
Te błędy zostały ponownie ustalone w Visual Studio 2010 z dodatkiem Service Pack 1.
pojedyncze stepping przez jeden wątek wydaje się być przede wszystkim stałe w VS 2012 (z pewnymi zastrzeżeniami można zobaczyć w moim linku poniżej). Punkty przerywania to ból.
Nici zamrażające i rozmrażające to typowe obejście problemu, jak podają poprzednie odpowiedzi, ale jest to nużące i może powodować zawieszanie się, gdy wątek czeka na inny wątek, który jest zamrożony. Może to być trudne do odzyskania od bez utraty miejsca w wątku zainteresowania.
Innym przydatnym pracy jest zastosowanie filtra wątek na swoje pułapki, a także określonych w niektóre odpowiedzi:
Tworzenie przerwania, kliknij prawym przyciskiem na przerwania, kliknij filtr, a następnie wprowadź ThreadID = 7740 (Twój wątek id z okna wątków).
Może to być bardzo uciążliwe.
Moja sugestia dla Microsoft polega na naprawieniu pojedynczego kroku (i jego odmian), aby nigdy nie przełączać wątków, chyba że w innym wątku zostanie trafiony jawny punkt przerwania. Powinny również dodać skrót (być może Ctrl-F9), aby utworzyć punkt przerwania z bieżącym identyfikatorem wątku jako filtrem. To sprawiłoby, że drugi przepływ pracy byłby o wiele wygodniejszy.
Zagłosuj się z sugestią, jeśli zgadzasz to byłoby przydatne, lub dodawać własne propozycje:
"Pojedyncze przejście przez pojedynczy wątek wydaje się być w większości naprawione w VS 2012" - niezupełnie, nadal jest uszkodzony w VS2017. – user626528
Znacznie szybciej obejście istnieje dla prostych przypadkach - patrz komentarze w linku Steve'a.
debugger wykona tylko krok na wątku, z którego powstał krok. Więc jeśli trafisz punkt przerwania, wyłącz go, a następnie zacznij kroczyć, nie powinieneś zatrzymywać się na innym wątku. Jeśli masz inne punkty przerwania w aplikacji i inny wątek uderza jedno, wtedy będzie debugowanie w mieszanym stanie nici jak opisano
Więc w moim przypadku gdy różne wątki rozpoczęte uderzenie mojego przerwania po prostu hit dalej kilka razy, dopóki nie zidentyfikowałem połączenia, którego szukałem - następnie usunąłem punkt przerwania i przeszedłem przez resztę kodu, pozostając w tej samej wątku bez ingerencji ze strony pozostałych.
To oczywiście staje się problemem, jeśli masz wiele punktów zatrzymania, które chcesz zachować, itd. - ale znowu w prostych przypadkach jest to znacznie łatwiejsze.
- 1. Debugowanie kompilacji Visual Studio z Eclipse
- 2. Zatrzymaj debugowanie jednego projektu
- 3. Visual Studio: debugowanie wielu projektów w tym samym czasie?
- 4. Debugowanie plików zrzutu w programie Visual Studio
- 5. Visual Studio JavaScript debugowanie bardzo powolne
- 6. Debugowanie JavaScript w Visual Studio 2008
- 7. Visual Studio Zdalne debugowanie przy uruchamianiu aplikacji
- 8. Debugowanie Visual Studio 2010 w stałym porcie
- 9. Jak działa debugowanie w Visual Studio?
- 10. Debugowanie wątków C#
- 11. Wywołanie accept() z wielu wątków
- 12. Debugowanie procedury obsługi protokołu HTTP z programu Visual Studio
- 13. Visual Studio - Zapobiegaj zatrzymywanie debugowanie z zamknięciem programu Internet Explorer
- 14. Przenoszenie plików z jednego rozwiązania Visual Studio na inny
- 15. Jak korzystać z wielu wątków
- 16. Wywołanie Console.WriteLine z wielu wątków
- 17. odłączyć jeden proces z visual studio debugger
- 18. Visual Studio - Publikowanie w wielu lokalizacjach?
- 19. Łączenie wielu plików konfiguracyjnych w Visual Studio
- 20. wizualne debugowanie kodu Studio z angularjs
- 21. Zdalne debugowanie za pomocą Visual Studio i serwera WinDbg
- 22. Debugowanie Visual Studio za pomocą Silverlight 4 i Firefox
- 23. Visual Studio Code debugowanie chrome, punkty przerwania nie będą trafiać
- 24. Debugowanie testów Nunit w Visual Studio C# Express 2010
- 25. Prefast z Visual Studio 2008
- 26. Debugowanie niezarządzanych obrazów w C++ w Visual Studio
- 27. Ustaw debugowanie argumentów kątomierza w kodzie Visual Studio
- 28. Visual Studio kończy debugowanie bez żadnego wyjątku lub błędu.
- 29. Debugowanie gadżetów paska bocznego systemu Windows bez programu Visual Studio
- 30. Odczekaj wielu wątków (POSIX C++)
której wersji Visual Studio używasz? Express, Pro, Ultimate ..? – Mark
@ Mark Używam ostatecznego –
, a następnie link jeffamaphone pomoże i może to również dla dalszych informacji, aby przejść do innego wątku podczas debugowania http://msdn.microsoft.com/en-us/library/bb157786.aspx – Mark