How do I use the MinGW gdb debugger to debug a C++ program in Windows?

c++, debugging, gdb, mingw, windows

Solution

The first step is to compile your program with `-g` to include debugging information within the executable:

g++ -g -o myprog.exe mycode.cpp

Then the program can be loaded into `gdb`:

gdb myprog.exe

A few commands to get you started:

- `break main` will cause the debugger to break when `main` is called. You can also break on lines of code with `break FILENAME:LINENO`. For example, `break mycode.cpp:4` breaks execution whenever the program reaches line 4 of `mycode.cpp`.

- `start` starts the program. In your case, you need to set breakpoints before starting the program because it exits quickly.

At a breakpoint:

- `print VARNAME`. That's how you print values of variables, whether local, static, or global. For example, at the `for` loop, you can type `print temp` to print out the value of the `temp` variable.

- `step` This is equivalent to "step into".

- `next` or `adv +1` Advance to the next line (like "step over"). You can also advance to a specific line of a specific file with, for example, `adv mycode.cpp:8`.

- `bt` Print a backtrace. This is a stack trace, essentially.

- `continue` Exactly like a "continue" operation of a visual debugger. It causes the program execution to continue until the next break point or the program exits.

The best thing to read is the GDB users' manual.

Problem

I have looked for documentation on this and found nothing. I have MinGW installed and it works great. I just don't know how to use the debugger. Given some simple code, say in a file called "mycode.cpp": ``` int main() { int temp = 0; for (int i = 0; i < 5; ++i) temp += i; return 0; } ``` ...how would I debug this. What are the commands that I use to debug code with MinGW and GDB in windows? Can I step through the code via the command line like in Visual Studio? If so what commands do I use to do that? Are there any tutorials for using GDB out there? I couldn't find any, but if anyone could direct me to one that would be great too. I'm tired of writing tons of `std::cout` statements to debug complex code.

Original source

Related problems