Gdb
Jump to navigation
Jump to search
References
Prepare debug session
- Compile with debug symbols, use option -g:
gcc -g program.c # -g : debug symbols
gcc -g -O0 program.c # ... -O0: disable optimization
- 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 |