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

From Code::Blocks
m (Explain, why -g)
(Explain debugging Contructors/Destructors)
Line 21: Line 21:
 
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.
  
Breakpoints do not work in constructors or destructors. They do, however, work in routines <u>called</u> from them. This is a GDB restriction, not a bug.
+
Breakpoints do not work in constructors or destructors. They do, however, work in routines <u>called</u> from them. This is a GDB restriction, not a bug. So you could do something like:
 +
  MyClass::MyClass()
 +
  {
 +
    DebugCtorDtor();
 +
    is_initialised = true;
 +
  }
 +
  MyClass::~MyClass()
 +
  {
 +
    DebugCtorDtor();
 +
    is_initialised = false;
 +
  }
 +
  MyClass::DebugCtorDtor()
 +
  {
 +
    int i = 0; // Dummy
 +
  }
 +
...and place a breakpoint in "DebugCtorDtor" at the line "int i = 0; // Dummy". The debugger will break at that line. If you go step-wise then (Menu Debug -> Next Line; or alternatively F7) you'll reach the code in the contructor/destructor (is_initialised = true/false).

Revision as of 06:49, 26 October 2006

Make sure that the project is compiled with the -g compiler option. This ensures that the executable has debug symbols included. Please notice that for other compilers than GCC this might be a different switch.

Menu => Project => Build Options Set Project Build Options


Open The Debugger Watches Window

Open Watch Window


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.

Notes:

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

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

 MyClass::MyClass()
 {
   DebugCtorDtor();
   is_initialised = true;
 }
 MyClass::~MyClass()
 {
   DebugCtorDtor();
   is_initialised = false;
 }
 MyClass::DebugCtorDtor()
 {
   int i = 0; // Dummy
 }

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