Gdb: Difference between revisions

From miki
Jump to navigation Jump to search
Line 197: Line 197:
|Run until temporary breakpoint set at ''_location_''.
|Run until temporary breakpoint set at ''_location_''.
|}
|}
display _expr_
Display _expr_ at each invocation (if within scope).
undisplay _number_
Undisplay expression by _number_.


;Display and print
;Display and print

Revision as of 09:11, 22 November 2016

References

GDB front-ends

There is also the built-in Text User Interface to GDB (C-x C-a: http://davis.lbl.gov/Manuals/GDB/gdb_21.html

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

Reference:


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
info locals
info args
Print information on local variables / function arguments in the current frame
print VAR
Print value of variable VAR
list
List specified function or line (see help line for more information)
kill
Kill current program
b FILE:LINE
break FILE:LINE
Insert a breakpoint at file FILE, line LINE
watch expr
stop execution when expr. changes
awatch expr
stop execution when expression is accessed (read or write)
next
Step to next instruction
cont
continue execution
help command
apropos word
type help followed by command name for full documentation
type apropos wrod to serrch for commands related to word
Command name abbreviations are allowed if unambiguous
source script
source given script
save breakpoints file
save b file
save current breakpoints as script
RETURN
repeat last command
b main Put a breakpoint at the beginning of the program
b Put a breakpoint at the current line
b N Put a breakpoint at line N
b +N Put a breakpoint N lines down from the current line
b fn Put a breakpoint at the beginning of function "fn"
d N delete breakpoint number N
r Run the program until a breakpoint or error
c continue running the program until the next breakpoint or error
f Run until the current function is finished
s run the next line of the program
s N run the next N lines of the program
n like s, but don't step into functions
u N run until you get N lines in front of the current line
p var print the current value of the variable "var"
bt print a stack trace
u go up a level in the stack
d go down a level in the stack
q Quit gdb
Break points

b _location_
break _location_

Set breakpoint at _location_.

i b
info b
info break

list breakpoints

cl _location_
clear _location_

Clear breakpoint by _location_

d
delete

Delete all breakpoints

d _number_
delete _number_

Clear breakpoint by _number_ (as listed by i b)

dis _number_
disable _number_

Disable breakpoint by _number_ (as listed by i b)
Execute program

run

Start execution (or restart)

s
step

Step into current line

n
next

Run to next line (step over current line)

finish

Execute till returning from current selected frame.

advance _location_

Run until temporary breakpoint set at _location_.
Display and print

display _expr_

Display _expr_ at each prompt (if within scope).

undisplay _number_

Undisplay expression by _number_.

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

Fix the bug, then start again, watching now buf:

watch buf
# Start again, answer 'y' when asked to start from beginning
run
# Break at watch point, let's _c_ontinue
c