Breakpoint - Breakpoint

Interfejs debugowania z Eclipse z programem zawieszonej na przerwania. Panele z ślad stosu (lewy górny) i oglądanych zmiennych (prawy górny) można zobaczyć.

W rozwoju oprogramowania , wykorzystując przerwania jest celowe zatrzymywanie lub wstrzymywanie miejsce w programie , wprowadzonego do debugowania celów. To jest czasami określany po prostu jako pauzy .

Mówiąc bardziej ogólnie, punkt przerwania jest sposobem zdobywania wiedzy na temat programu w trakcie jego realizacji. Podczas przerwy The programator kontroluje badania środowiska ( rejestrów ogólnego przeznaczenia , pamięci , dzienniki, pliki , itp), aby dowiedzieć się, czy program działa zgodnie z oczekiwaniami. W praktyce przerwania składa się z jednego lub większej liczby warunków, które określają, kiedy wykonanie programu powinno zostać przerwane.

Breakpoint warunki

Punkty przerwania są najczęściej używane do natychmiastowego przerwania programu przed jego wykonaniem programatora określonym instrukcją . To jest często określane jako przerwania instrukcji .

Inne rodzaje warunków mogą być również wykorzystywane, takich jak czytanie, pisanie, lub modyfikacji określonej lokalizacji w obszarze pamięci. To jest często określany jako warunkowy punkt przerwania , a przerwania danych , lub watchpoint .

Punkty przerwania może być również używany, aby przerwać wykonanie w określonym czasie, na jakiś klawisz itd.

narzędzia inspekcyjne

Gdy punkt przerwania jest trafiony, różne narzędzia są wykorzystywane do sprawdzenia stanu programu lub zmienić ją. Ślad stosu każdego wątku może być używany, aby zobaczyć łańcuch funkcji połączeń, które doprowadziły do dyspozycji wstrzymania. Lista zegarki pozwala na przeglądanie wartości wybranych zmiennych i wyrażeń . Nie mogą być również narzędzia do pokazania zawartości rejestrów , załadowanych programowych modułów i innych informacji.

wdrożenia

Sprzęt komputerowy

Wiele procesorów obejmują sprzętową obsługę przerwań (zazwyczaj instrukcji i danych punktów przerwań). Jako przykład, zestaw instrukcji x86 architektura zapewnia wsparcie sprzętowe dla przerwań ze swoich rejestrów x86 debugowania . Taki sprzęt może zawierać ograniczeń, na przykład nie pozwalając punkty przerwania na instrukcji znajdujących się w gniazdach opóźnienia oddział . Tego rodzaju ograniczenie narzuca mikroarchitektury procesora i zmienia się od procesora do procesora.

Oprogramowanie

Bez wsparcia sprzętowego (aw środowiskach wielozadaniowość), debuggery mają wdrożyć punkty przerwania w oprogramowaniu. Dla pułapki instrukcji, jest to stosunkowo proste zadanie zastąpienia dyspozycję w miejscu złamania przez:

  • instrukcja, która wywołuje debugera bezpośrednio (np wywołanie systemowe ) lub
  • nieprawidłowy instrukcja, która powoduje zamierzone przerwanie programu (który jest następnie przechwytywany / obsługiwane przez debugger)

Technika ta może być trudniejsze do wdrożenia w wielozadaniowych systemów wykorzystujących wspólny pamięci programu (przerwanie może nastąpić na inny wątek, wymagające powstanie od pierwotnego instrukcji do tego gwintu). Ponadto, jeżeli program rezyduje w pamięci chronionej, nadpisywanie instrukcje można zapobiec.

Alternatywnie,

  • zestaw symulator instrukcja może realizować bezwarunkowe lub warunkowe punkty przerwania, po prostu przez umieszczenie odpowiednich testów warunku wśród własnej normalnego cyklu programu - to także naturalnie umożliwia nieinwazyjne punktów przerwań (na tylko do odczytu programów na przykład).
  • Języki interpretowane mogą skutecznie korzystać z tego samego pojęcia jak wyżej w ich cyklu programu.
  • „Instrumentacji” cały kod źródłowy z dodatkowych sprawozdań źródłowych, które wystawia funkcję , która powołuje się na wewnętrzne lub zewnętrzne podprogram debugowania, jest kolejnym wspólnym podejściem. Sposób ten zwiększa binarnego rozmiar i może niekorzystnie wpływać na normalne i przydział pamięci wyjątków obsługi . Opcje „Debug” istnieje na niektórych kompilatorów do wdrożenia tej techniki półprzezroczystej.

Niektóre debuggery pozwalają rejestry lub zmienne w pamięci programu do modyfikacji przed wznowieniem, skutecznie umożliwiając wprowadzenie „ręcznie kodowane” zadań tymczasowych dla celów testowych. Podobnie, instrukcje programu mogą być często pomijane w celu określenia wpływu zmian w programie sterującym - umożliwienie pytania dotyczące realizacji programu należy odpowiedzieć w sposób bezpośredni (tj bez założeń lub zgadywania). W wielu przypadkach może to być jedyna praktyczna metoda testowania niejasnych podprogramów błędach „zdarzeniami”, które rzadko, jeśli w ogóle, zostanie wykonany - bez dodanego ryzyko pozostawienia zmian źródłowych tymczasowe. Ręcznie zmieniając położenie w wznowienia wstrzymanego programu mogą być wykorzystane, aby wprowadzić inaczej rzadko wykonywany fragment kodu (takie jak określony stan obsługi sprzętowej).

Wdrażanie punktów przerwania danych w oprogramowaniu jednak, może znacznie zmniejszyć wydajność aplikacji debugowany - ponieważ jest za pomocą dodatkowych środków na tym samym procesorze. Jest to jednak zwykle dopuszczalne w trakcie testów i ilości dostępnych informacji z debuggera nie jest ograniczone przez ograniczenia danych debugowania znanych sprzętu. Na przykład, wdrożenie oprogramowania może zbierać dane ścieżek logicznych na poziomie programu / podprogramu / instrukcję znacznie zwiększać, co może być przechowywany przez konkretną platformę sprzętową dla inspekcji. Zestaw instrukcji metodą symulacji znacznie zmniejsza nakład pracy, w porównaniu z (powtarzane) metodą z użyciem instrukcji, zmniejszając również sytuacji niebezpiecznych bufora .

Niektóre implementacje języka programowania wystawiać swoje funkcje debugowania do wykorzystania przez inne programy. Na przykład, niektóre FORTRANIE dialekty mieć AToświadczenie, które zostało pierwotnie przeznaczony do działania jako punkt przerwania obsługi. Python implementuje debugger dostępny z programu Pythona. Urządzenia te mogą być i są wykorzystywane do działania jak COMEFROM oświadczeniu.

Historia

Wynalazek Wartości graniczne zostały wymyślone przez ENIAC , jeden z najwcześniejszych komputerów cyfrowych, przez programistę Betty Holberton .

Wartości graniczne maszynowe Wczesne komputery mainframe, takich jak IBM / 360 , miał przełączniki Console / tarcze, które pozwoliły punkty przerwania w określonych adresów pamięci instrukcja i dostarczane „pojedynczego cyklu” pracy, umożliwiając zawartości rejestrów i pamięci mają być obserwowane bezpośrednio na światłach konsoli. Pojawienie wielozadaniowość ogranicza stosowanie tej opcji, ponieważ cała maszyna została wstrzymana.

Nieinteraktywne breakpoints Programiści wykorzystali łaty kodowe maszyna do wdrożenia pojedynczych destrukcyjne breakpoints spowodować zrzutu od pierwszych dni komputerów. Rdzeń zrzutu pod warunkiem, że stan rejestrów i pamięci w momencie, zamierzonego „crash”.

Interaktywny Punkty odcięcia Pojawienie dalekopisowych konsol w 1960 roku pozwoliło bardziej interaktywne wiersza poleceń możliwości debugowania, ale nie było aż do roku 1970 i przybyciem wszechobecnych monitorów podłączonych do komputerów typu mainframe , które w pełni interaktywny, pełen ekran debugowania w środowiskach wielozadaniowych stała się rzeczywistością. Pozwoliło to również krok po kroku wykonanie programu w prawdziwej animacji Program sposób z opcjonalnym rejestru oraz zmian pamięci wyświetlane jednocześnie. Początkowo ten rodzaj animacji był na poziomie zdemontowanym lub dekompilować kodu maszynowego, ale później awansowała do HLL animacji na poziomie źródła.

Zobacz też

Referencje