This shows you the differences between two versions of the page.
dydaktyka:cprog:learning_resources:debugging [2016/10/02 20:13] pkleczek utworzono |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Debuggowanie ====== | ||
- | Zdarza się, że choć program nie zawiera błędów składniowych (czyli kompiluje się bez problemów i da się go uruchomić), to jednak nie działa zgodnie z oczekiwaniami. W takich sytuacjach do zdiagnozowania przyczyny problemu przydaje się narzędzie o nazwie //debugger//. | ||
- | |||
- | **Debugger** (nazwa czasem tłumaczona na polski jako "odpluskwiacz" :-)) służy do krokowego wykonania programu (czyli instrukcja po instrukcji), z możliwością podglądu stanu programu (a więc m.in. wartości zmiennych) po każdym kroku. | ||
- | |||
- | :!: Debugger nie jest częścią języka -- to narzędzie dostarczane (zazwyczaj) w ramach zintegrowanego środowiska programistycznego. | ||
- | |||
- | Podczas procesu debuggowania korzysta się z **//breakpoint//**-ów, które mówią debuggerowi tyle -- "koniecznie zatrzymaj się tutaj". | ||
- | |||
- | [size=10](Ciekawi Cię, skąd się wzięła nazwa //"bug"//? -- Przeczytaj w wolnej chwili [[https://en.wikipedia.org/wiki/Software_bug#Etymology|ten]] krótki fragment.)[/size] | ||
- | |||
- | |||
- | ===== Debuggowanie w CodeBlocks ===== | ||
- | |||
- | Do nauki wykorzystaj poniższy kod: | ||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | int i; | ||
- | int n = 2; | ||
- | |||
- | printf("Zaczynamy...\n"); | ||
- | |||
- | for (i = 1; i < 5; i++) { | ||
- | n = n * n; | ||
- | } | ||
- | |||
- | printf("Wynik = %d\n", n); | ||
- | } | ||
- | </code> | ||
- | |||
- | (W razie problemów z uruchomieniem debuggera zaglądnij do [[http://home.agh.edu.pl/~pkleczek/dokuwiki/doku.php?id=dydaktyka:cprog:faq#dlaczego_debugger_nie_zatrzymuje_sie_na_breakpointach|FAQ]].) | ||
- | |||
- | Debuggowanie krok po kroku: | ||
- | - Aby móc przystąpić do debuggowania, dodaj choć jeden breakpoint. W tym celu przejdź do linijki z pierwszą instrukcją ''printf()'' i wybierz //Debug -> Toggle breakpoint// -- po lewej stronie, koło numeru wiersza, pojawi się czerwona kropka (symbol breakpoint-u). | ||
- | - Wybierz //Debug -> Start/Continue// -- uruchomiony zostanie proces debuggowania. | ||
- | - Aby zobaczyć podgląd zmiennych, wybierz //Debug -> Debugging windows -> Watches// | ||
- | - Przejdź program krok po kroku (//Debug -> Next line//), aż do jego zakończenia, i obserwuj zmiany wartości zmiennych oraz zawartości okna konsoli. | ||
- | |||
- | W oknie //Watches// w pierwszej kolumnie możesz podać w wolnym polu u dołu dowolne poprawne wyrażenie -- jego wartość zostanie automatycznie obliczona zgodnie z bieżącym stanem programu. \\ Dodaj wyrażenie ''x + 8 < 20'' i ponownie prześledź zmianę wartości tego wyrażenia podczas kolejnych obiegów pętli. | ||
- | |||
- | Czasem interesuje Cię podgląd stanu programu tylko w kilku określonych miejscach -- dodaj w nich breakpointy, a następnie przechodź pomiędzy nimi (czyli wykonuj automatycznie wszystkie instrukcje pomiędzy obecnym, a kolejnym breakpointem) za pomocą //Debug -> Start/Continue//. \\ | ||
- | Dodaj drugi breakpoint przy drugim wywołaniu ''printf()''. Uruchom debuggowanie, a następnie ponownie wybierz //Debug -> Start/Continue//. | ||
- | |||
- | :!: Pod kątem dalszych studiów na kierunku Inżynieria Biomedyczna zapamiętaj -- **MATLAB także posiada debugger**! :-D |