Slajd 1 z 10 C++ - [1-3] Debugowanie w Qt Creator Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 15 maja 2013 r.
Slajd 2 z 10 Pojęcia związane z debugowaniem DEBUGOWANIE (z ang. debugging odrobaczanie) proces systematycznego redukowania liczby błędów w oprogramowaniu, który zazwyczaj polega na kontrolowanym wykonaniu programu pod nadzorem debuggera (źródło: Wikipedia). BUG (ang. robak, insekt) w kontekście programowania oznacza błąd uniemożliwiający lub powodujący nieprawidłowe działanie programu (źródło: Wikipedia). DEBUGGER (ang. Debug tool, Debugger odpluskwiacz) program komputerowy służący do dynamicznej analizy innych programów, w celu odnalezienia i identyfikacji zawartych w nich błędów.
Slajd 3 z 10 Etapy debugowania ETAPY DEBUGOWANIA jest to kwestia bardzo indywidualna, ale można wyróżnić następujące ogólne etapy debugowania (źródło: http://pl.wikipedia.org/wiki/debugowanie): 1. Reprodukcja błędu odkrycie błędu i umiejętność celowego wywołania błędu w programie. 2. Wyizolowanie źródła błędu eliminacja wszystkich tych czynników, które nie przyczyniają się bezpośrednio do powstania błędu. 3. Identyfikacja przyczyny awarii obserwacja stanów programu podczas jego kontrolowanego uruchomienia (np. poprzez debugowanie). 4. Usunięcie defektu należy zwrócić uwagę, czy usnięcie jednego defektu nie spowoduje powstania innych błędów (nowych lub takich, które występowały przed zaobserwowaniem usuniętego defektu. 5. Weryfikacja powodzenia naprawy w tym celu program testowany jest róznymi zestawami danych wejściowych.
Slajd 4 z 10 Konfiguracja Qt Creator do debugowania TRYBY BUDOWANIA PROGRAMU wyróżniamy: Tryb Debug plik binarny (będący wynikiem kompilacji i połączenia plików źródłowych) zawiera dodatkowe informacje umożliwiające debugowanie programu (dzieje się to kosztem wolniejszej pracy programu oraz większego zużycia pamięci operacyjnej). Tryb Release plik binarny pozbawiony informacji umożliwiających debugowanie programu w tym trybie kompiluje się programy w wersjach przeznaczonych dla użytkowników końcowych. KONFIGURACJA TRYBU BUDOWANIA PROGRAMU tryb budowania ustawiamy na Debug (patrz: obok).
Slajd 5 z 10 Debugowanie w programie Qt Creator AKCJE DEBUGGERA dostępne są w menu Debugowanie. Rozpoczęcie oraz kontynuowanie debugowania możemy zrealizować za pomocą przycisku:. Najważniejsze z nich są dostepne także za pomocą następujących skrótów klawiszowych: [F5] rozpoczęcie albo kontynuacja debugowania; [F9] włączanie albo wyłączanie pułapki; [F10] wykonanie instrukcji bez wejścia do wnętrza funkcji; [Ctrl]+[F10] wykonanie instrukcji bez wejścia do wnętrza funkcji do momentu napotkania kursora; [F11] wykonanie instrukcji z wejściem do wnętrza funkcji; [Shift]+[F11] wykonywanie instrukcji do momentu wyskoczenia z bieżącej funkcji. Wskaźnik programu Pułapka Przyciski debuggera Przycisk rozpoczęcia debugowania Stos wywołań funkcji programu Podgląd aktualnych zmiennych Zdefiniowane pułapki Komunikaty (wyjście) aplikacji
Slajd 6 z 10 Podstawy debugowania lista zadań ZADANIE 1.3.1: Sprawdź za pomocą debugera działanie poniższgo programu. #include <iostream> #include <cmath> using namespace std; int main() { int r = 5; double obwod = 2*M_PI*r, pole = pow(m_pi, 2)*r; cout << "Dane jest koło o promieniu " << r << " cm.\n"; cout << "Obwód koła wynosi " << obwod << " cm." << endl; cout << "Pole koła wynosi " << pole << " cm2." << endl; return 0; } ZADANIE 1.3.2: Sprawdź za pomocą debugera działanie poniższego programu. #include <iostream> #include <cmath> using namespace std; int main() { int r = 5; double obwod = 2*M_PI*r, pole = pow(m_pi, 2)*r; cout << ' ' << r << ' ' << obwod << ' ' << pole << endl; return 0; }
Slajd 7 z 10 Przygotowanie danych dla operacji wejścia Obecnie w programie Qt Creator podczas debugowania nie można wczytywać danych bezpośrednio z klawiatury. Można to jednak zasymulować, ale dane będą wczytywane z pliku tekstowego, a nie z klawiatury. Z drugiej strony, wyobraźcie sobie wczytywanie miliona liczb z klawiatury. Przygotowanie pliku tekstowego z milionem liczb to jedynie kwestia napisania krótkiego programu. Po przygotowaniu pliku tekstowego z danymi wejściowymi należy umieścić go np. w katalogu z binarną wersją programu (w Qt Creator jest to zwykle katalog, którego nazwa kończy się na Debug, a nie katalog zawierający pliki źródłowe projektu). Czasami można znaleźć także katalog, którego nazwa kończy się na Release, ale taka wersja programu nie umożliwia debugowania. W dalszej części zakładamy, że plik tekstowy z danymi wejściowymi znajduje się w katalogu Debug z binarną wersją programu.
Slajd 8 z 10 Konfiguracja debugowania wejścia w Qt Creator W tym celu w oknie Projekty Desktop Uruchamianie należy: Wyłączyć opcję: Uruchom w terminalu ; W polu edycyjnym: Argumenty wprowadzić nazwę pliku tekstowego zawierającego dane wejściowe i poprzedzić ja znakiem < (symbol ten oznacza strumień wejściowy, który zostanie przekazany do programu przez system operacyjny), np. <dane_wejsciowe.txt.
Slajd 9 z 10 Debugowanie operacji wejścia - ćwiczenie ZADANIE 1.3.3: Przygotuj pliki tekstowe z poniższymi danymi (z prawej strony) i umieść je w katalogu z plikiem skompilowanym do debugowania. Następnie sprawdź działanie programu z tymi danymi. Czy program działa zawsze prawidłowo? #include <iostream> using namespace std; // Zwraca obwody 2 czworokątów // dane: długości boków 2 czworokątów int main() { int a1, b1, c1, d1, // boki 1-go czworokąta a2, b2, c2, d2; // boki 2-go czworokąta } cin >> a1 >> b1 >> c1 >> d1; cin >> a2 >> b2 >> c2 >> d2; int obwod_1 = a1 + b1 + c1 + d1, obwod_2 = a2 + b2 + c2 + d2; cout << obwod_1 << ' ' << obwod_2 << endl; 1 3 5 7 2 4 6 4 0 9 4 7 7 3.5 4 5.5 1 11 3 6.5 3 7.5 8 5 100 100 100 100 300 30 30 39 15 11 31 73 39 77 8 91 44531 3761 67273 36477 56519 11673 33274 6548
Slajd 10 z 10 C++ - [1-3] Debugowanie w Qt Creator Dziękuję za uwagę ŹRÓDŁA WIEDZY: Jerzy Grębosz Symfonia C++ Standard oraz http://4programmers.net/, http://cplusplus.com.