Wywoluje sie getter podczas debugowania

0

Debugowalem sobie kod w celu znalezenia gdzie kolekcja bledow (List<Error> Errors) zostaje zwiekszona.
Gdy w pewnym momencie najezdzalem na obiekt ktory zawieral ta liste, ta lista sie powiekszala (count++ za kazdym najechaniem na obiekt).
Wywnioskowalem, ze to przez to ze ten obiekt posiada property gdzie w getterze jest dodawany wlasnie do tej kolekcji error

Pytanie jest nastepujace

Czy da sie wylaczyc w opcjach by nie wykonywal kodu dynamicznie podczas debuggowania? Ciezko znalezc miejsce gdzie sie kolekcja zwieksza jezeli po najechaniu obiektu ta kolekcja sie zwieksza...

0

Ale jaki sens ma debugowanie bez wykonywania kodu? o.O

2

Nie znam odpowiedzi na pytanie ale imo nie jest to istotne. Getter nie powinien modyfikować stanu obiektu, bo w końcu kiedyś dostaniesz rykoszetem. W zasadzie właśnie masz taki przypadek ;)

EDIT:
Po chwili zastanowienia, to się raczej nie da, bo właściwość w C# to jest cukierek składniowy, pod którym znajdują się dwie funkcje. Jeżeli podglądasz wartość zmiennej, wywoływany jest getter, a więc funkcja. Wydaje mi się, że nie ominiesz tego.

0

Moze zle napisalem

Zatrzymuje sie na linijce powiedzmy 115. W tym momencie nic sie nie wykonuje, nie ma innych watkow. Glowny jest zatrzymany na 115 linii.

Lista powinna miec count == 0.

Najezdzam myszka na obiekt. Count == 0. Najezdzam jeszcze raz na obiekt patrze a count == 1. Za kazdym razem gdy najezdzam na obiekt myszka (a program nadal jest zatrzymany na tej 115 linijce) lista jest powiekszana.

obiekt na ktory najezdzam kursorem posiada getter ktory zwieksza liste. Wystarczy tylko najechac myszka na obiekt zeby zobaczyc jego stan a jego stan sie ZMIENIA... to nie jest normalne

0

Naprawdę Kiepsko napisany kod. Getter który NIE powinien wprowadzać zmian, wprowadza zmiany. Ehh.

Workaround:
Ustaw sobie breakpointa w getterze. Pomiń ręcznie przesuwając strzałeczka zwiększanie się listy błędów, albo usuwaj ręcznie przez immediate window.

Ja generalnie raczej najpierw bym to przepisał jakoś sensownie, o ile da się łatwo, a potem debugował (najpierw prze prosto, nowa metoda GetX, która robi 1:1 to co ten getter, łącznie ze zwiększaniem i zastąpienie gettera w kodzie nią(Shift+F12). Getter byłby teraz tylko do podglądu. Dało by się debugować normalnie. Później przepisałbym to sensowniej).

2

Rozwiązanie problemu jest bardzo proste: skasuj kod, a współpracowników spal zanim zdążą się rozmnożyć

Getter który wywołuje się podczas próby odczytu wartości, setter który się wywołuje przy próbie zapisania wartości... CO DALEJ?! Konstruktor który się wykona przy tworzeniu obiektu?! Szaleństwo

0

@AreQrm

breakpoint nie dziala... moze zapomnialem wspomniec o tym. Kod wykonuje sie "po cichu"

@Wielki Mlot Tak wywolanie sie gettera PODCZAS DEBUGGOWANIA, PODCZAS NAJECHANIE MYSZKA NA OBIEKT to jest WTF. Debugowalem w swoim zyciu troche, ale czegos takiego po prostu nie widzialem nigdy. Dlatego sie zapytalem czy jest mozliwosc wylaczenia tego, bo dla mnie to normalnie nie jest (zachowanie rozumiem, nadal najechanie myszka na obiekt nie powinno zmieniac jego stanu. Dopiero RECZNE wywolanie tego gettera powinno zmienic stan obiektu)

0

To przepisz to i debugging wtedy. :-(

W ogóle nigdy nie sprawdzałem czy podglądanie obiektu jest przez getter properties'a czy odwołuje się bezpośrednio do wartości. Ciekawe rzeczy pokazujesz przez złe napisany kod można się czegoś nauczyć :-P

0

Twoja odpowiedz jest na takiej zasadzie

Ja: "Panowie, jak otwieram maske to wlaczaja mi sie wycieraczki, jak to wylaczyc?"
@AreQrm: "Do d**y jest zaprojektowany ten samochod. Wez przebuduj otwieranie klapy i wycieraczki"

przepisywanie to nie jest rozwiazanie (tym bardziej ze projekt wczoraj zobaczylem po raz pierwszy na oczy). Chcialem sie dowiedziec czy jest mozliwosc wylaczenia tej nieszczesnej opcji

0
fasadin napisał(a):

@Wielki Mlot Tak wywolanie sie gettera PODCZAS DEBUGGOWANIA, PODCZAS NAJECHANIE MYSZKA NA OBIEKT to jest WTF. Debugowalem w swoim zyciu troche, ale czegos takiego po prostu nie widzialem nigdy.

Ależ to jest ułatwienie. W przeciwnym razie nie mielibyśmy podglądu właściwości wcale.

Jeżeli potrzebujemy coś zmieniać przy pobieraniu właściwości, to powinno się robić to metodą. Wtedy sprawa jest bardziej oczywista.

Przy okazji przytoczę dla tych co nie widzieli (ostatni akapit):

http://mcfunley.com/from-the-annals-of-dubious-achievement

1 użytkowników online, w tym zalogowanych: 0, gości: 1