Zastanawiałem się, jakie są techniki zlokalizowania, który kod implementuje określoną funkcję w aplikacji komputerowej.
Jestem młodszym programistą, z profesjonalnym doświadczeniem w programowaniu internetowym. W Internecie łatwiej to zrobić. Na przykład „przeglądasz” przycisk za pomocą narzędzi przeglądarki i możesz zobaczyć, co się dzieje po jego kliknięciu. A następnie, zakładając, że masz pełny kod źródłowy, możesz pogłębić hierarchię wywołań.
Ale jak to zrobić w aplikacjach komputerowych? Przynajmniej bez konieczności nurkowania w pełnej bazie kodu?
debugging
desktop-application
py_script
źródło
źródło
Odpowiedzi:
Śledzenie pleców
Śledzenie wsteczne polega na zlokalizowaniu punktu końcowego zdarzenia powiązanego z funkcją (patrz poniżej). Tam znajduje się punkt przerwania w debuggerze. Ta funkcja jest uruchamiana i zatrzymuje się debuger. Stos wywołań jest sprawdzany pod kątem wstecznego śledzenia ścieżki wywoływania. Idąc w górę stosu wywołań, możesz robić notatki na temat stanów zmiennych lub umieszczać nowe punkty przerwania, aby ponownie sprawdzić zdarzenie.
Ta funkcja jest ponownie wyzwalana, a debuger zatrzymuje się w nowych punktach przerwania. Następnie możesz powtarzać śledzenie wstecz lub wykonywać śledzenie do przodu, aż do znalezienia celu.
Za I przeciw
Endpoint Discovery
Aby debugować funkcję, musisz wiedzieć, gdzie w kodzie źródłowym osiągnięty jest ostateczny cel. Tylko od tego momentu możesz śledzić wstecz, aby zobaczyć, jak kod się tam dostał. Przykład; Aby zrozumieć, jak wykonuje się cofanie. Wiesz, gdzie w kodzie rzeczy się cofają, ale nie wiesz, jak się tam sprawy mają . Byłby to kandydat do śledzenia wstecznego, aby dowiedzieć się, jak działa ta funkcja.
Śledzenie do przodu
Śledzenie do przodu polega na zlokalizowaniu punktu początkowego zdarzenia związanego z funkcją (patrz poniżej). Tam wiadomości logowania są wstawiane do kodu źródłowego lub ustawiane są punkty przerwania. Proces ten powtarza się w miarę oddalania się od punktu początkowego, aż odkryjesz cel funkcji.
Za I przeciw
Rozpocznij odkrywanie punktów
Możesz użyć słów kluczowych, identyfikatorów interfejsu użytkownika (identyfikatory przycisków, nazwy okien) lub łatwo znaleźć detektory zdarzeń powiązane z funkcją. Na przykład możesz zacząć od przycisku służącego do uruchamiania funkcji cofania .
Proces eliminacji
Możesz myśleć o tym jako o punkcie środkowym w porównaniu do pozycji punktu początkowego i końcowego . Proces eliminacji wykonuje się, gdy wiadomo, że w kodzie użyto fragmentu kodu , ale nie jest to ani początek, ani koniec funkcji.
Kierunek, który wybierzesz od punktu środkowego, zależy od liczby wejść i wyjść. Jeśli fragment kodu jest używany w wielu miejscach, śledzenie wstecz z tej pozycji może być bardzo czasochłonne, ponieważ wszystkie muszą zostać sprawdzone. Następnie stosuje się proces eliminacji, aby zmniejszyć tę listę. Alternatywnie, możesz wykonać śledzenie do przodu od tego miejsca, ale ponownie, jeśli fragment kodu rozgałęzia się do wielu miejsc, może to również stanowić problem.
Musisz zredukować kierunki pozycji, nie podążając ścieżkami, które najwyraźniej nie zostałyby wykonane dla operacji. Przechodzenie obok tego kodu i umieszczanie punktów przerwania tylko tam, gdzie jest to prawdopodobnie związane z funkcją.
Debugowanie w punkcie środkowym często wymaga bardziej zaawansowanych funkcji IDE. Możliwość zobaczenia hierarchii kodu i zależności. Bez tych narzędzi trudno to zrobić.
Za I przeciw
źródło
Zakładając, że ta funkcja jest powiązana z jakimś interfejsem użytkownika, takim jak przycisk lub menu, zwykle robię to (bardzo żmudne, ale działa). Jest to pominie kodu źródłowego, a nie za pomocą debuggera .
SUPER_BUTTON_3 = "Super Feature X3"
. Do przyszłego wykorzystania zapamiętaj tę nazwę pliku.Jak zauważył @amon, czasami debugger jest prostszy ...
źródło
Jeśli możesz w ogóle znaleźć pokrewny kod, możesz użyć oprogramowania do kontroli źródła, aby pokazać całe zatwierdzenie lub pobliskie zatwierdzenia, które go dodały. To powinno pokazać ci wszystko, co było wymagane do wdrożenia tej funkcji.
Jednym z łatwych sposobów znalezienia punktu wyjścia do przeszukania byłoby przeszukanie bazy kodu w poszukiwaniu tekstu na przycisku.
Często ludzie umieszczają identyfikator problemu ze swojego modułu do śledzenia problemów w swoich komunikatach zatwierdzania. Jeśli możesz znaleźć problem opisujący żądanie funkcji, możesz wyszukać zatwierdzenia z tym identyfikatorem problemu.
źródło