156
jak to zrobić
Jest to bardzo użyteczna technika, gdy w pamięci występują błędy lub zmienna uzyskuje złą wartość, ale nie wiemy, co powoduje problem. Źródłem usterki może być zwykła pomyłka albo coś bardziej podstępnego, jak na przykład przeładowanie bufora.
1. Z menu Edit wybrać polecenie Breakpoints.
2. Wyświetlić kartę „Data”.
3. Wpisać wyrażenie, którego zmiana ma powodować zatrzymanie. Wpisanie na przykład wyrażenia sz powoduje zatrzymanie wówczas, gdy zmienia się wartość zmiennej sz. Wyrażenie sz=3 zatrzymuje wykonywanie programu wtedy, gdy zmienna sz uzyskuje wartość 3.
Zatrzymywanie działania programu w wypadku zmiany wartości wyrażenia jest bardzo wydajną techniką. Visual C++ nie używa jednak w tym celu żadnych operacji sprzętowych, co powoduje znaczne spowolnienie wykonywania kodu. Od rozpoczęcia debugowania do odpowiedzi Visual C++ może upłynąć nawet kilka minut. Mimo że technika ta pozwoli znaleźć bardzo poważne, trudne do wyśledzenia błędy, to nie należy traktować jej jako najlepszej metody wykrywania wszystkich usterek.
Najlepiej testować program krok po kroku, obserwując jak zmieniają się dane po każdorazowym dodaniu kolejnego fragmentu kodu. W ten sposób znajdziemy błędy, zanim zrobią nam jakąś przykrość (zobacz wskazówka 138.).
157
jak to zrobić
Czasem wiemy, jaką wartość musi mieć dana zmienna, i w celu zachowania tej wartości, musimy przeskoczyć do jakiegoś konkretnego wiersza. Być może podejrzewamy, że któryś z wierszy powoduje błąd i chcemy go ominąć. Albo chcemy wyjść z nieskończonej pętli, zachowując stan zmiennych. W tym celu należy wykonać w de-bugerze podane czynności.
1. Prawym przyciskiem myszy kilknąć w wierszu, do którego chcemy przenieść wykonywanie programu.
2. Z menu podręcznego wybrać polecenie Set Next Statement.
Następną wykonywaną instrukcję można też wskazać w oknie „Registers”, zmieniając rejestr EIP. Należy przy tym zachować dużą ostrożność, gdyż łatwo wszystko popsuć.