Czy istnieje sposób na umieszczenie zegarka na zmiennej i przerwanie programu Visual Studio tylko przy zmianie tej wartości?
Ułatwiłoby to znalezienie trudnych problemów ze stanem.
Czy można to zrobić?
Warunki punktu przerwania nadal wymagają ustawienia punktu przerwania, a wolałbym ustawić zegarek i pozwolić Visual Studio ustawić punkty przerwania przy zmianach stanu.
Odpowiedzi:
W menu Visual Studio 2005:
Debuguj -> Nowy punkt przerwania -> Nowy punkt przerwania danych
Wchodzić:
źródło
Możesz także zdecydować się na jawne złamanie kodu:
Z MSDN:
Jest to jednak tylko awaria. Ustawienie warunkowego punktu przerwania w Visual Studio, jak opisano w innych komentarzach, jest lepszym wyborem.
źródło
Naprawdę stary post, ale na wypadek, gdyby ktoś nie był świadomy ...
W programie Visual Studio 2015 można umieścić punkt przerwania na
set
akcesorium właściwości zaimplementowanej automatycznie, a debuger ulegnie awarii, gdy właściwość zostanie zaktualizowanaAktualizacja
Alternatywnie; @AbdulRaufMujahid zauważył w komentarzach, że jeśli właściwość auto zaimplementowana znajduje się w jednym wierszu, możesz ustawić kursor na
get;
lubset;
i nacisnąć,F9
a punkt przerwania zostanie odpowiednio umieszczony. Miły!źródło
Wyobraź sobie, że masz klasę o nazwie A z następującą deklaracją.
Chcesz, aby program zatrzymał się, gdy ktoś zmodyfikuje wartość „m_value”.
Przejdź do definicji klasy i umieść punkt przerwania w konstruktorze A.
Po zatrzymaniu programu:
Debugowanie -> Nowy punkt przerwania -> Nowy punkt przerwania danych ...
Adres: & (this-> m_value) Liczba
bajtów: 4 (Ponieważ int ma 4 bajty)
Teraz możemy wznowić program. Debuger zatrzyma się po zmianie wartości.
Możesz zrobić to samo z klasami dziedziczonymi lub klasami złożonymi.
Adres: i (this-> m_a.m_value)
Jeśli nie znasz liczby bajtów zmiennej, którą chcesz sprawdzić, możesz użyć operatora sizeof.
Na przykład:
Jeśli spojrzysz na „stos wywołań”, zobaczysz funkcję, która zmieniła wartość zmiennej.
źródło
Zmień zmienną na właściwość i dodaj punkt przerwania w ustawionej metodzie. Przykład:
źródło
Jeśli używasz WPF, istnieje niesamowite narzędzie: Inspektor WPF .
Dołącza się do aplikacji WPF i wyświetla pełne drzewo kontrolek ze wszystkimi właściwościami, i pozwala (między innymi) na przerwanie każdej zmiany właściwości.
Niestety nie znalazłem żadnego narzędzia, które pozwoliłoby ci zrobić to samo z KAŻDĄ właściwością lub zmienną.
źródło
Pamiętam, jak opisałeś to za pomocą Visual Basic 6.0 . W Visual Studio jedynym sposobem, jaki do tej pory znalazłem, jest określenie warunku punktu przerwania .
źródło
Kliknięcie prawym przyciskiem myszy punktu przerwania działa dla mnie dobrze (chociaż głównie używam go do warunkowych punktów przerwania dla określonych wartości zmiennych. Nawet łamanie wyrażeń zawierających nazwę wątku działa, co jest bardzo przydatne, jeśli próbujesz wykryć problemy z wątkami).
źródło
Jak napisał Peter Mortensen:
Dodatkowe informacje:
Oczywiście system musi wiedzieć, który adres w pamięci do obejrzenia. Więc - ustaw normalny punkt przerwania na inicjalizację
myVariable
(lubmyClass.m_Variable
) - uruchom system i poczekaj, aż zatrzyma się w tym punkcie przerwania. - Teraz pozycja Menu jest włączona i można oglądać zmienną, wprowadzając&myVariable
lub instancję, wprowadzając&myClass.m_Variable
. Teraz adresy są dobrze zdefiniowane.Przepraszam, gdy zrobiłem coś źle, wyjaśniając już podane rozwiązanie. Ale nie mogłem dodać komentarza i było kilka komentarzy na ten temat.
źródło
Możesz użyć punktu obserwacyjnego pamięci w niezarządzanym kodzie. Nie jestem jednak pewien, czy są one dostępne w kodzie zarządzanym.
źródło
Prawdopodobnie możesz sprytnie wykorzystać funkcję DebugBreak () .
źródło
myVariable
jest używany, i zapisać jego wartości po użyciu wpreviousValue
zmiennej pomocniczej , a następnie wywołać DebugBreak () whenmyVariable!=previousValue
; wtedy będziesz wiedział między którymi blokami kodu sięmyVariable
zmienił. Ale zgadzam się, że rozwiązanie AShelly jest najlepsze.Opcjonalnie można przeciążać operator = dla zmiennej i ustawić punkt przerwania w funkcji przeciążonej na określonych warunkach.
źródło
Aktualizacja w 2019 roku:
To jest teraz oficjalnie obsługiwane w Visual Studio 2019 Preview 2 dla .Net Core 3.0 lub wyższej. Oczywiście być może będziesz musiał zastanowić się nad potencjalnym ryzykiem związanym z używaniem wersji Preview IDE. Wyobrażam sobie, że w najbliższej przyszłości zostanie to uwzględnione w oficjalnym Visual Studio.
https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/
źródło