____ ____ ____
/ ___| _ \| __ )
| | _| | | | _ \
| |_| | |_| | |_) |
\____|____/|____/
GDB commands by function - simple guide
Startup
| Syntax | Description | |—|—| |% gdb -help| print startup help, show switches| |% gdb object|normal debug| |% gdb object core| core debug (must specify core file)| |% gdb object pid| attach to running process |% gdb| use file command to load object
Help
Syntax | Description |
---|---|
(gdb) help | list command classes |
(gdb) help running | list commands in one command class |
(gdb) help run | bottom-level help for a command “run” |
(gdb) help info | list info commands (running program state) |
(gdb) help info line | help for a particular info command |
(gdb) help show | list show commands (gdb state) |
(gdb) help show commands | specific help for a show command |
Breakpoints
| Syntax | Description | |—|—| |(gdb) break main| set a breakpoint on a function |(gdb) break 101| set a breakpoint on a line number |(gdb) break basic.c:101| set breakpoint at file and line (or function) |(gdb) info breakpoints| show breakpoints |(gdb) delete 1| delete a breakpoint by number |(gdb) delete| delete all breakpoints (prompted) |(gdb) clear| delete breakpoints at current line |(gdb) clear function| delete breakpoints at function |(gdb) clear line| delete breakpoints at line |(gdb) disable 2| turn a breakpoint off, but don’t remove it |(gdb) enable 2| turn disabled breakpoint back on |(gdb) tbreak function|line| set a temporary breakpoint |(gdb) commands break-no … end| set gdb commands with breakpoint |(gdb) ignore break-no count| ignore bpt N-1 times before activation |(gdb) condition break-no expression break only if condition is true |(gdb) condition 2 i == 20| example: break on breakpoint 2 if i equals 20 |(gdb) watch expression| set software watchpoint on variable |(gdb) info watchpoints| show current watchpoints
Running the program
Syntax | Description |
---|---|
(gdb) run | run the program with current arguments |
(gdb) run args redirection | run with args and redirection |
(gdb) set args args… | set arguments for run |
(gdb) show args | show current arguments to run |
(gdb) cont | continue the program |
(gdb) step | single step the program; step into functions |
(gdb) step count | singlestep \fIcount\fR times |
(gdb) next | step but step over functions |
(gdb) next count | next \fIcount\fR times |
(gdb) CTRL-C | actually SIGINT, stop execution of current program |
(gdb) attach process-id | attach to running program |
(gdb) detach | detach from running program |
(gdb) finish | finish current function’s execution |
(gdb) kill | kill current executing program |
Stack backtrace
Syntax | Description |
---|---|
(gdb) bt | print stack backtrace |
(gdb) frame | show current execution position |
(gdb) up | move up stack trace (towards main) |
(gdb) down | move down stack trace (away from main) |
(gdb) info locals | print automatic variables in frame |
(gdb) info args | print function parameters |
Browsing source
Syntax | Description |
---|---|
(gdb) list 101 | list 10 lines around line 101 |
(gdb) list 1,10 | list lines 1 to 10 |
(gdb) list main | list lines around function |
(gdb) list basic.c:main | list from another file basic.c |
(gdb) list - | list previous 10 lines |
(gdb) list *0x22e4 | list source at address |
(gdb) cd dir | change current directory to \fIdir\fR |
(gdb) pwd | print working directory |
(gdb) search regexpr | forward current for regular expression |
(gdb) reverse-search regexpr | backward search for regular expression |
(gdb) dir dirname | add directory to source path |
(gdb) dir | reset source path to nothing |
(gdb) show directories | show source path |
Browsing Data
Syntax | Description |
---|---|
(gdb) print expression | print expression, added to value history |
(gdb) print/x expressionR | print in hex |
(gdb) print array[i]@count | artificial array - print array range |
(gdb) print $ | print last value |
(gdb) print *$->next | print thru list |
(gdb) print $1 | print value 1 from value history |
(gdb) print ::gx | force scope to be global |
(gdb) print ‘basic.c’::gx | global scope in named file (>=4.6) |
(gdb) print/x &main | print address of function |
(gdb) x/countFormatSize address | low-level examine command |
(gdb) x/x &gx | print gx in hex |
(gdb) x/4wx &main | print 4 longs at start of \fImain\fR in hex |
(gdb) x/gf &gd1 | print double |
(gdb) help x | show formats for x |
(gdb) info locals | print local automatics only |
(gdb) info functions regexp | print function names |
(gdb) info variables regexp | print global variable names |
(gdb) ptype name | print type definition |
(gdb) whatis expression | print type of expression |
(gdb) set variable = expression | assign value |
(gdb) display expression | display expression result at stop |
(gdb) undisplay | delete displays |
(gdb) info display | show displays |
(gdb) show values | print value history (>= gdb 4.0) |
(gdb) info history | print value history (gdb 3.5) |
Object File manipulation
Syntax | Description |
---|---|
(gdb) file object | load new file for debug (sym+exec) |
(gdb) file | discard sym+exec file info |
(gdb) symbol-file object | load only symbol table |
(gdb) exec-file object | specify object to run (not sym-file) |
(gdb) core-file core | post-mortem debugging |
Signal Control
Syntax | Description |
---|---|
(gdb) info signals | print signal setup |
(gdb) handle signo actions | set debugger actions for signal |
(gdb) handle INT print | print message when signal occurs |
(gdb) handle INT noprint | don’t print message |
(gdb) handle INT stop | stop program when signal occurs |
(gdb) handle INT nostop | don’t stop program |
(gdb) handle INT pass | allow program to receive signal |
(gdb) handle INT nopass | debugger catches signal; program doesn’t |
(gdb) signal signo | continue and send signal to program |
(gdb) signal 0 | continue and send no signal to program |
Machine-level Debug
Syntax | Description |
---|---|
(gdb) info registers | print registers sans floats |
(gdb) info all-registers | print all registers |
(gdb) print/x $pc | print one register |
(gdb) stepi | single step at machine level |
(gdb) si | single step at machine level |
(gdb) nexti | single step (over functions) at machine level |
(gdb) ni | single step (over functions) at machine level |
(gdb) display/i $pc | print current instruction in display |
(gdb) x/x &gx | print variable gx in hex |
(gdb) info line 22 | print addresses for object code for line 22 |
(gdb) info line *0x2c4e | print line number of object code at address |
(gdb) x/10i | main disassemble first 10 instructions in \fImain\fR |
(gdb) disassemble addr | dissassemble code for function around addr |
History Display
Syntax | Description |
---|---|
(gdb) show commands | print command history (>= gdb 4.0) |
(gdb) info editing | print command history (gdb 3.5) |
(gdb) ESC-CTRL-J | switch to vi edit mode from emacs edit mode |
(gdb) set history expansion on | turn on c-shell like history |
(gdb) break class::member | set breakpoint on class member. may get menu |
(gdb) list class::member | list member in class |
(gdb) ptype class | print class members |
(gdb) print *this | print contents of this pointer |
(gdb) rbreak regexpr | useful for breakpoint on overloaded member name |
Miscellaneous
Syntax | Description |
---|---|
(gdb) define command … end | define user command |
(gdb) RETURN | repeat last command |
(gdb) shell command args | execute shell command |
(gdb) source file | load gdb commands from file |
(gdb) quit | quit gdb |
GDB Notes
1). break main – Breaks main :P, basically sets a breakpoint at main entry point.
2). clear main –> removes bp
3). watch -> to tell whenever a variable changes, VERY critical.
4). run -> runs the program
5). print varname -> prints value of a variable
6). step -> steps into a function
7). next -> steps over a function
8). continue -> continues until the next breakpoint or watch point
9). list -> prints the code
10). quit -> ends
11). disassemble -> prints the assembly
12). set disassemly-flavor intel for intel syntax
13). x/xg x/s x/s etc are for examining the registers
14). set values using set $rax = pewpew