Difference between revisions of "Debugging with Code::Blocks"

From Code::Blocks
Line 37: Line 37:
 
Breakpoints may also be toggled with a left click in the left editor margin.
 
Breakpoints may also be toggled with a left click in the left editor margin.
  
=Notes on Setting Breakpoints=
+
=Notes=
 +
==Single file debugging==
 +
To debug your program you need to setup a project. Single file programs are not supported.
 +
 
 
==Path with spaces==
 
==Path with spaces==
 
Breakpoints could not work if the path/folder you've placed your project contains spaces or other special characters. To be safe use English letters, digits and '_'.
 
Breakpoints could not work if the path/folder you've placed your project contains spaces or other special characters. To be safe use English letters, digits and '_'.
  
==Update to the newest version of mingw==
+
==Update to the newest version of MinGW==
 
From gdb 6.8 released on April 2008, it supports many features which does not exist in early versions. You can update by installing binaries from [http://www.tdragon.net/recentgcc/ TDM-Mingw package].
 
From gdb 6.8 released on April 2008, it supports many features which does not exist in early versions. You can update by installing binaries from [http://www.tdragon.net/recentgcc/ TDM-Mingw package].
  
==Limits on the early version of mingw==
+
==Limits on the early version of MinGW==
If your are still using the mingw and gdb 6.7 from [https://www.codeblocks.org/downloads/5 8.02 setup files], setting breakpoints in the constructor will not work. Here are some tricks.
+
If your are still using the MinGWand gdb 6.7 from [https://www.codeblocks.org/downloads/5 8.02 setup files], setting breakpoints in the constructor will not work. Here are some tricks.
  
 
Breakpoints do not work in constructors or destructors in GDB 6.7 and earlier version. They do, however, work in routines <u>called</u> from them. This is an early GDB restriction, not a bug. So you could do something like:
 
Breakpoints do not work in constructors or destructors in GDB 6.7 and earlier version. They do, however, work in routines <u>called</u> from them. This is an early GDB restriction, not a bug. So you could do something like:
Line 51: Line 54:
 
[[Image:DbgWithCBExp.png|Debugging ctor/dtor ]]
 
[[Image:DbgWithCBExp.png|Debugging ctor/dtor ]]
  
...and place a breakpoint in "DebugCtorDtor" at the line "int i = 0;" . The debugger will break at that line. If you then step the debugger (Menu Debug => Next Line; or alternatively F7) you'll reach the code in the contructor/destructor ("is_initialised = true/false;").
+
...and place a breakpoint in "DebugCtorDtor" at the line "int i = 0;" . The debugger will break at that line. If you then step the debugger (Menu Debug => Next Line; or alternatively F7) you'll reach the code in the constructor/destructor ("is_initialised = true/false;").

Revision as of 08:36, 12 November 2010

Build debug version of your project

Make sure that the project is compiled with the -g (debugging symbols) compiler option on, and the -s (strip symbols) option off. This ensures that the executable has debug symbols included.

Compiler optimization switches should be turned off, stripping symbols (-s) must be turned off.

Keep in mind that you may have to re-build your project as up-to-date object files might not be re-compiled with -g otherwise. Please be aware that in compilers other than GCC, -g and/or -s might be a different switch (-s might not ba available at all).

Menu => Project => Build Options

Set Project Build Options

Add Watches

Open The Debugger Watches Window

Open Watch Window

The list of watches can be saved to a file and later re-loaded. To do so, right click in the list of watches and select "save watch file" (and "load watch file" to re-load them again).

Save watch.png

Note : when debugging, double-clicking on a frame in the "call stack" debug window does not automatically update the variables displayed in the "watches" debug window.

You have to right-click on a frame in the "call stack" debug window and select "Switch to this frame".

DWCB watches 01.png

Set Breakpoints

Find the line containing the variable to be watched. Set a breakpoint in a position that will allow you to observe the variable value.

Menu => Debug => Toggle Breakpoint

Choose Watch Variable

Run the debugger until the breakpoint is reached. Right click the variable to set a watch in the Watch Window.

Breakpoints may also be toggled with a left click in the left editor margin.

Notes

Single file debugging

To debug your program you need to setup a project. Single file programs are not supported.

Path with spaces

Breakpoints could not work if the path/folder you've placed your project contains spaces or other special characters. To be safe use English letters, digits and '_'.

Update to the newest version of MinGW

From gdb 6.8 released on April 2008, it supports many features which does not exist in early versions. You can update by installing binaries from TDM-Mingw package.

Limits on the early version of MinGW

If your are still using the MinGWand gdb 6.7 from 8.02 setup files, setting breakpoints in the constructor will not work. Here are some tricks.

Breakpoints do not work in constructors or destructors in GDB 6.7 and earlier version. They do, however, work in routines called from them. This is an early GDB restriction, not a bug. So you could do something like:

Debugging ctor/dtor

...and place a breakpoint in "DebugCtorDtor" at the line "int i = 0;" . The debugger will break at that line. If you then step the debugger (Menu Debug => Next Line; or alternatively F7) you'll reach the code in the constructor/destructor ("is_initialised = true/false;").