The Right Way to Use Gcc/G++/Gdb: From Compilation to Debugging

Today, let’s talk about gcc, g++, and gdb. These three are the big guns in C/C++ development. Once you master them, coding and debugging will feel as easy as drinking water!

gcc and g++: Great Helpers for Compilation

What are gcc and g++? In simple terms, they are compilers. gcc is mainly used to compile C code, while g++ is used for C++ code. However, they are actually part of the same family, both members of the GNU Compiler Collection.

Let’s look at an example. Suppose we have a file called hello.c:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

Compile it with gcc:

gcc hello.c -o hello

What does this command mean? It tells gcc: “Hey, compile hello.c into an executable file named hello.”

After compiling, run it directly:

./hello

You will see “Hello, World!” on the screen.

Tip: If your code uses some advanced features, you might need to add parameters like -std=c99 or -std=c11 to specify which version of the C standard to use.

g++: The Good Brother of C++

g++ is quite similar to gcc, but it is specifically used for compiling C++ code. For example, we have a hello.cpp:

#include <iostream>

int main() {
    std::cout << "Hello, C++!" << std::endl;
    return 0;
}

Compile it with:

g++ hello.cpp -o hello_cpp

Then run it:

./hello_cpp

You will see “Hello, C++” appear.

Things About Compilation

The compilation process is actually quite complex, but we can simply understand it as four steps: preprocessing, compiling, assembling, and linking.

  1. Preprocessing: Handle all preprocessing directives that start with #, such as #include, #define, etc.
  2. Compiling: Convert C/C++ code into assembly code.
  3. Assembling: Convert assembly code into machine code.
  4. Linking: Link all object files together to generate the final executable file.

gcc and g++ will by default perform all four steps at once, but you can also make them do it step by step. For example:

gcc -c hello.c  # Compile only, do not link, generates hello.o
gcc hello.o -o hello  # Link hello.o to generate executable file hello

gdb: The Debugging Tool

Writing code inevitably leads to errors, and that’s when gdb comes in handy. gdb is a powerful debugging tool that allows you to execute code line by line, check variable values, set breakpoints, and more.

Before debugging with gdb, you need to compile the program with the -g option:

gcc -g hello.c -o hello

Then start gdb:

gdb hello

Once in gdb, common commands include:

  • run (or r): Run the program
  • break (or b): Set a breakpoint
  • next (or n): Step over, do not enter functions
  • step (or s): Step into, will enter functions
  • print (or p): Print the value of a variable
  • continue (or c): Continue running until the next breakpoint
  • quit (or q): Exit gdb

For example, you can use it like this:

(gdb) break main
(gdb) run
(gdb) next
(gdb) print variable_name
(gdb) continue

This way, you can see step by step how the code executes and where it goes wrong.

gdb also has a graphical interface version called cgdb, which is more intuitive. If you’re interested, you can look it up.

Alright, that’s all for today. By mastering these tools, you can code, compile, and debug like a pro. Remember, practice makes perfect; the more you practice, the better you get!

Leave a Comment