GDB stands for GNU Project Debugger and is a powerful debugging tool for C(along with other languages like C++).It helps you to poke around inside your C programs while they are executing and also allows you to see what exactly happens when your program crashes. GDB operates on executable files which are binary files produced by compilation process.
For demo purpose, below example is executed on a Linux machine with below specs.
Let’s learn by doing:-
1.Go to your Linux command prompt and type “gdb”.
Gdb open prompt lets you know that it is ready for commands. To exit out of gdb, type quit or q.
2. Below is a program that shows an undefined behaviour when compiled using C99.
Note:- If an object that has automatic storage duration is not initialised explicitly, its value is indeterminate, where indeterminate value is either an unspecified value or a trap representation.
3. Now compile the code.(here test.c).
g flag means you can see the proper names of variables and functions in your stack frames, get line numbers and see the source as you step around in the executable.
-std=C99 flag implies use standard C99 to compile the code.
-o flag writes the build output to an output file.
4. Run gdb with generated executable.
Here are few useful commands to get started with gdb for above example:-
run or r –> executes the program from start to end.
break or b –> sets breakpoint on a particular line.
disable -> disable a break point.
enable –> enable a disabled breakpoint.
next or n -> executes next line of code, but don’t dive into functions.
step –> go to next instruction, diving into function.
list or l –> displays the code.
print or p –> used to display the stored value.
quit or q –> exits out of gdb.
clear –> to clear all breakpoints.
continue –> continue normal execution.
5.Now, type “l” at gdb prompt to display the code.
6. Let’s introduce a break point, say line 5.
If you want to put breakpoint at different lines, you can type “b line_number“.By default “list or l” display only first 10 lines.
7.In order to see the breakpoints, type “info b”.
8. Having done above, let’s say you changed your mind and you want to revert.
Type “disable b”.
As marked in blue circle, Enb becomes n for disabled.
9. To re-enable the recent disabled breakpoint. Type “enable b”.
10. Run the code by typing “run or r”.If you haven’t set any breakpoints, run command will simply execute the full program.
11. To see the value of variable, type “print variable_name or p variable_name“.
The above shows the values stored at x at time of execution.
12. To change the value of variable in gdb and continue execution with changed value, type “set variable_name“.
13. Below screenshot shows the values of variables from which it’s quite understandable the reason why we got a garbage value as output. At every execution of ./test we will be receiving different output.
Exercise:Try using set x = 0 in gdb at first run and see the output of c.
GDB offers many more ways to debug and understand your code like examining stack, memory, threads, manipulating the program, etc.I hope the above example helps you get started with gdb.
- Namespace in C++ | Set 1 (Introduction)
- C Language Introduction
- Introduction to Iterators in C++
- Hygienic Macros : An Introduction
- Pointers in C and C++ | Set 1 (Introduction, Arithmetic and Array)
- Understanding "volatile" qualifier in C | Set 1 (Introduction)
- Forward List in C++ | Set 1 (Introduction and Important Functions)
- Virtual Functions and Runtime Polymorphism in C++ | Set 1 (Introduction)
- Dividing a Large file into Separate Modules in C/C++, Java and Python
- aptitude command in Linux with examples
- How to delete a range of values from the List using Iterator
- How to create a List with Constructor in C++ STL
- C program to store Student records as Structures and Sort them by Name
- How to delete last element from a List in C++ STL
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.