Ś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
- Zawsze łatwiej jest wejść na stos wywołań i zobaczyć, jak się gdzieś dostałeś.
- Mogą istnieć miliony warunków, które muszą być spełnione przed osiągnięciem punktu końcowego. Jeśli znasz już punkt końcowy, zaoszczędziłeś sobie dużo pracy.
- Jeśli funkcja jest zepsuta. Możesz nigdy nie dotrzeć do punktu końcowego, a czas może zostać zmarnowany, próbując dowiedzieć się, dlaczego.
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
- To najłatwiejszy punkt wyjścia do znalezienia funkcji.
- Złożoność kodu zmniejsza skuteczność śledzenia do przodu. Im więcej warunków w kodzie, tym większa szansa, że pójdziesz w złym kierunku.
- Śledzenie w przód często powoduje ustawienie punktów przerwania, które będą wyzwalane przez niepowiązane zdarzenia. Przerywanie procesu debugowania i zakłócanie wyszukiwania.
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
- Punkty środkowe są często pierwszym kawałkiem kodu, który pojawia się w twojej głowie, gdy myślisz o tej funkcji. Mówicie sobie: „Ach, do pracy trzeba użyć XXXX”.
- Punkty środkowe mogą najłatwiej ujawnić punkty początkowe .
- Punkty środkowe mogą być łatwym sposobem na wybranie ścieżki do obiektu, gdy zostanie utracony przez synchronizację lub zmiany wątków.
- Punkty środkowe mogą zabrać Cię do kodu, którego nie znasz. Poświęcenie czasu na nauczenie się, co się dzieje.