fbpx ...

Debuggery - narzędzia programisty

Debuggery są narzędziem potrzebnym każdemu programiście. Pozwalają one zaoszczędzić wielu godzin szukania błędów w naszym kodzie. Co więcej, dają również możliwość kontrolowania wykonywanego program, zatrzymywania go, wykonywania instrukcji krok po kroku i śledzenia wartości poszczególnych zmiennych.

W związku z tym chcę ci przedstawić ten skrót z lekcji kursu C++. Znajdziesz tu informacje, w jaki sposób korzystać z debuggerów GDB i LLDB.

Debuggery w skrócie

Rozpocznę od klasycznego debuggera GDB (narzędzie konsolowe z możliwością korzystania z różnych interfejsów graficznych), a później przejdę do narzędzia LLDB, wywodzącego się z rodziny narzędzi Clang. Chociaż LLDB jest znany ze swojej wygody, to jednak GDB jest standardem w branży. Poniżej przedstawiam kilka kluczowych komend:

Uruchamianie debuggera

Pierwszym krokiem jest uruchomienie programu pod kontrolą debuggera. Na przykład: „gdb nazwa_binarki”. Pozwala to na rozpoczęcie analizy kodu źródłowego. 

Uruchamianie programu

W oknie debuggera wpisz komendę „run”. 

Ustawianie Breakpointów

Breakpointy to kluczowe narzędzie debugowania. Pozwalają na zatrzymanie wykonania programu w określonym miejscu. W GDB użyj komend „break” lub „b”, aby utworzyć breakpointy. Przykładowo: „break 5” utworzy breakpoint w linii numer 5.

Lista breakpointów

Aby sprawdzić listę ustawionych breakpointów, możesz skorzystać z komendy „info breakpoints”. Daje to pełen przegląd punktów przerwania, co ułatwia zarządzanie nimi.

Usuwanie breakpointów

Po zakończeniu debugowania możesz usunąć breakpointy za pomocą komendy „clear” lub „delete breakpoint N”, gdzie N to numer breakpointu do usunięcia.

Zakończenie debugowania

Po zakończeniu procesu debugowania możesz wyjść z programu za pomocą komendy „quit”. To pozwala na czyste zakończenie debugowania i zwolnienie zasobów.

Wyświetlanie wartości zmiennych

Podczas debugowania często chcemy sprawdzić wartości zmiennych. W GDB możesz to zrobić, używając komendy „print” lub jej skrótu „p”. Przykład: „p var” wyświetli wartość zmiennej „var”.

Obserwowanie zmiennych (watchpoint)

Watchpoint to mechanizm, który umożliwia zatrzymanie wykonania programu po zmianie wartości danej zmiennej lub w określonym miejscu w pamięci. Aby użyć watchpointa, wprowadź komendę „watch var”, gdzie var to nazwa zmiennej do obserwowania.

Tryb tekstowy i graficzny

GDB oferuje możliwość korzystania z trybu tekstowego lub graficznego. Tryb graficzny można uruchomić, odpalając gdb z przełącznikiem –tui, czyli „gdb –tui nazwa_binarki”. Daje to wygodny interfejs do analizy kodu źródłowego i stosu wywołań.

Wchodzenie do funkcji

Aby wejść w środek funkcji i monitorować jej działanie, użyj komendy „step into”, jej skrótu „si” lub „s”. Pozwalają one na śledzenie przebiegu wykonywania funkcji krok po kroku.

Przeglądanie stosu wywołań

W trakcie debugowania przydatne jest monitorowanie stosu wywołań funkcji. Możesz to zrobić za pomocą komendy „backtrace” lub jej skrótu „bt”. To da Ci pełny obraz wywołań funkcji w trakcie programu.

Przesuwanie się po stosie

Jeśli chcesz przemieszczać się po stosie wywołań, możesz użyć komend „up” aby przejść do wyższego poziomu wywołań funkcji oraz „down” do niższego.

Debuggery - czy warto?

Podsumowując, debugger to nieocenione narzędzie dla programistów, które pozwala na dokładne zrozumienie i naprawianie problemów w kodzie źródłowym. Znajomość podstawowych komend debuggera, takich jak „run”, „break”, „print”, i „backtrace”, jest kluczowa dla skutecznego debugowania. Pozwala to na efektywne i precyzyjne rozwiązywanie problemów w Twoim kodzie. Warto zainwestować czas w naukę korzystania z debuggera, ponieważ może to znacząco usprawnić proces programowania.

Chcesz dowiedzieć się więcej, albo po prostu wolisz widzieć co dzieje się w konsoli? Zachęcam do obejrzenia materiału wideo. A jeśli zainteresował Cię temat debuggerów to zerknij na nasz kurs narzędzia programisty. 🛠️

ninjaletter

A może Ninjaletter?

Chcesz wiedzieć, co słychać w C++ i nie tylko? Zapisz się na Ninjaletter i otrzymuj od nas co miesiąc dawkę wartościowych treści o C++ i zadania rekrutacyjne. Do tego dorzucamy darmowe materiały, spoilery o nowych kursach, specjalne promocje dla ninjaletterowiczów i wiele, wiele innych. To co, skusisz się?

Łukasz Ziobroń

Łukasz Ziobroń

Zmieniam ludzi w prawdziwych programistów. W nauczaniu stosuję grywalizację, andragogikę i neurodydaktykę.

Najnowsze artykuły

good programming practices

Good programming practices – Coding Dojo

Training in a form of Coding Dojo. Participants start with a code review of a small application. They note down their comments. After that, the trainer presents bad and good programming practices. Participants discuss what can be applied in a reviewed code and start fixing it in a form of Coding Dojo.

Czytaj »

Popular C++ Idioms – Coding Dojo

The training starts with a code review of a small application (pre-work). Participants note their thought and discuss their findings in groups. Then popular C++ idioms are presented (the concept and some code) – about 15-20 minutes each. After that participants need to use some of the idioms in a reviewed application code.

Czytaj »
performance optimisations

Performance optimisations

This training is about writing more robust C++ code and algorithms with the help of CPU caches and a compiler. Benchmarking tools are used to show performance gains.

Czytaj »
C++ toolset

C++ toolset

Covers a lot of ground about C++ related tools: build systems, compilers, debuggers, static and dynamic binary analyzers. It is focused more on discovering useful tools, that can solve many software engineering problems.

Czytaj »

Templates – Advanced techniques

Basic usage of C++ templates may not be enough to utilize opportunities, which were introduced in the latest C++ standards. From C++11 we can use templates with any number of parameters and use a simplified mechanism for SFINAE, which is claimed to be a real C++ wizardry.

Czytaj »
templates – basics

Templates – Basics

Templates are pointed out to be the most difficult part of the C++ language. Difficult, but very useful. They allow writing very generic and universal code. Thanks to them, we can avoid code duplication, but also, make it incomprehensible for beginners. This session allows for gaining the necessary knowledge and good practices on using templates.

Czytaj »
STL algorithms in C++ 17

STL Algorithms in C++ 17

This training focuses on the effective use of C++ documentation to implement applications with the use of STL algorithms. First part is mainly theoretical, but there are many short exercises (in a paper form) to apply knowledge instantly and force participants to think and search for solutions in the documentation. The other part is a group activity – implementation of the cryptographic application with proper STL algorithms instead of raw loops.

Czytaj »
STL containers

STL Containers

This training focuses on the effective use of C++ documentation. Computational complexity issues are mentioned. There are many short exercises to apply knowledge instantly and force participants to think and search for solutions in the documentation.

Czytaj »
ninjaletter

Już uciekasz?

Zanim to zrobisz, zapisz się na Ninjaletter, aby wiedzieć, co piszczy w C++. 

Informujemy, iż w celu realizacji usług dostępnych w naszym serwisie, optymalizacji jej treści, dostosowania strony do Państwa indywidualnych potrzeb oraz wyświetlania, personalizacji i mierzenia skuteczności reklam w ramach zewnętrznych sieci reklamowych korzystamy z informacji zapisanych za pomocą plików cookies na urządzeniach końcowych użytkowników. Pliki cookies można kontrolować za pomocą ustawień swojej przeglądarki internetowej. Dalsze korzystanie z naszego serwisu, bez zmiany ustawień przeglądarki internetowej oznacza, iż użytkownik akceptuje stosowanie plików cookies. Więcej informacji zawartych jest w polityce prywatności serwisu.