Gdb: Difference between revisions

From miki
Jump to navigation Jump to search
Line 19: Line 19:
<source lang="bash">
<source lang="bash">
gdb a.out
gdb a.out
gdb a.out core.1234
gdb a.out core.1234 # If coredump available
</source>
</source>



Revision as of 11:17, 22 July 2011

References

Prepare debug session

  • Compile with debug symbols, use option -g:
gcc -g program.c           # -g : debug symbols
  • Force core dumps (see bash help ulimit):
ulimit -c unlimited
./a.out
# Segmentation fault (core dumped)

GDB invocation

gdb a.out
gdb a.out core.1234           # If coredump available

GDB commands

help
Get help on commands
run [ARGS]
Start debugged program. Arguments may include wildcards (*) and redirections (<, <<...)
backtrace [COUNT]
bt [COUNT]
where [COUNT]
Print backtrace of all stack frames, or innermost (outermost) COUNT frames if COUNT>0 (COUNT<0)
frame [FRAME]
Select and print stack frame
print VAR
Print value of variable VAR
kill
Kill current program
break FILELINE
Insert a breakpoint at file FILE, line LINE
next
Step to next instruction

GDB examples

Simple Segmentation Fault Example

(From [1])

Example program segfault.c:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  char *buf;

  buf = malloc(1<<31);

  fgets(buf, 1024, stdin);
  printf("%s\n", buf);

  return 1;
}
Compile and launch gdb:
gcc -g segfault.c
gdb a.out

The debug session

run
backtrace
frame 3
print buf
kill
break segfault.c:8
run
print buf
next
print buf