Gdb: Difference between revisions
Jump to navigation
Jump to search
Line 34: | Line 34: | ||
== GDB commands == |
== GDB commands == |
||
Reference: |
|||
* GDB manual |
|||
* https://beej.us/guide/bggdb/ |
|||
;help |
;help |
||
:Get help on commands |
:Get help on commands |
||
Line 130: | Line 135: | ||
|- |
|- |
||
|q||Quit gdb |
|q||Quit gdb |
||
|} |
|||
;Break points |
|||
{| |
|||
|- |
|||
| |
|||
<code>b _location_</code><br/> |
|||
<code>break _location_</code><br/> |
|||
|Set breakpoint at ''_location_''. |
|||
|- |
|- |
||
| |
| |
||
Line 135: | Line 149: | ||
<code>info b</code><br/> |
<code>info b</code><br/> |
||
<code>info break</code><br/> |
<code>info break</code><br/> |
||
|list breakpoints |
|||
|- |
|||
| |
|||
<code>cl _location_</code><br/> |
|||
<code>clear _location_</code> |
|||
|Clear breakpoint by ''_location_'' |
|||
|- |
|- |
||
| |
| |
||
Line 143: | Line 162: | ||
|- |
|- |
||
| |
| |
||
<code> |
<code>d _number_</code><br/> |
||
<code>delete |
<code>delete _number_</code> |
||
| |
|Clear breakpoint by ''_number_'' (as listed by <code>i b</code>) |
||
|- |
|||
| |
|||
<code>dis _number_</code><br/> |
|||
<code>disable _number_</code> |
|||
|Disable breakpoint by ''_number_'' (as listed by <code>i b</code>) |
|||
|} |
|||
;Execute program |
|||
{| |
|||
|- |
|||
| |
|||
<code>run</code> |
|||
|Start execution (or restart) |
|||
|- |
|||
| |
|||
<code>s</code><br/> |
|||
<code>step</code> |
|||
|Step ''into'' current line |
|||
|- |
|||
| |
|||
<code>n</code><br/> |
|||
<code>next</code> |
|||
|Run to next line (''step over'' current line) |
|||
|- |
|||
| |
|||
<code>finish</code> |
|||
|Execute till returning from current selected frame. |
|||
|- |
|||
| |
|||
<code>advance _location_</code> |
|||
|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 |
|||
{| |
|||
|- |
|||
| |
|||
<code>display _expr_</code> |
|||
|Display _expr_ at each prompt (if within scope). |
|||
|- |
|||
| |
|||
<code>undisplay _number_</code> |
|||
|Undisplay expression by ''_number_''. |
|||
|} |
|} |
||
Revision as of 09:10, 22 November 2016
References
- 7.2 Example Debugging Session: Segmentation Fault Example (unkownroad.com)
- Debugging with GDB (delorie.com)
- GDB commands (tutorialspoint.com)
- An Interactive Guide to Faster, Less Frustrating Debugging
- Norm Matloff's Debugging Tutorial (also guide to fast editing and gui debuggers DDD, GVD)
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:
- GDB manual
- https://beej.us/guide/bggdb/
- 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
|
Set breakpoint at _location_. |
|
list breakpoints |
|
Clear breakpoint by _location_ |
|
Delete all breakpoints |
|
Clear breakpoint by _number_ (as listed by i b )
|
|
Disable breakpoint by _number_ (as listed by i b )
|
- Execute program
|
Start execution (or restart) |
|
Step into current line |
|
Run to next line (step over current line) |
|
Execute till returning from current selected frame. |
|
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 _expr_ at each prompt (if within scope). |
|
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 watch buf
# Start again, answer 'y' when asked to start from beginning
run
# Break at watch point, let's _c_ontinue
c
|