Honesty Rocks! truth rules.

C/c++ -gdb Linux Debug Tool Simple Gdb tutorial

HOME      >>       Programming

kanade

To run the C/C++ file use

 

$ gcc –g –o test sample.cpp

 

To debug the code use following command

 

$ gdb test --- you will get following messages

 

GNU gdb Red Hat Linux (6.3.0.0-1.122rh) Copyright 2004 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

 

(gdb) b 4 -- Set the break point for your code, here I have set for 4th line of the code

 

Breakpoint 1 at 0x8048384: file test2.c, line 4.

 

(gdb) r -- once the break point is set use “r “ to run the code

 

Starting program: /home/tests/test

Reading symbols from shared object read from target memory...done.

Loaded system supplied DSO at 0x8b5000

Breakpoint 1, main () at test2.c:5

5 {

 

(gdb) n -----press “n” to go to next line

 

main () at test2.c:7

7 max=MAX(5,4,3);

 

(gdb) n -----press “n” to go to next line

 

8 printf("\n%d",max);

 

(gdb) print max -----use “print” command to print any variables

 

$1 = 5

 

(gdb)

 

will add some more command to this at later stage.......


ml01172

It would be great if you added some info on debugging programs with threads. I'll take your turn now ;)

 

Typing:

info threads

 

will result in displaying which threads exist in the moment. The numbers in the first column (1, 2 etc.) represent the threads' ids. Once you know these ids, you can switch to corresponding threads like this:

 

thread 2

 

GDB will now be executing that thread in the front, while other threads will continue working in the background. You can use the usual techniques described above (next, quit, step, continue etc.) in this thread.

 

Debugging with threads tends to be complicated since multiple things happen at the same time. One might consider using sleep() in a thread so it doesn't "run away" before you switch to it in the debugger.