| gdb |
dbx |
|---|---|
|
Invocation | |
| gdb program gdb program core gdb program pid |
dbx progam dbx program core dbx program pid |
| gdb -c core gdb -p pid Note: need to specify program explicitly |
dbx - core dbx - pid (program is found automatically) Note: dbx cannot debug core files and live processes without access to program file, i.e. a.out |
| gdb -s file (read symbols from file) |
- |
| gdb -x file |
dbx ... < file dbx -s file ... |
| -tty device (Run using device for your program’s standard input and output) |
dbxenv run_io pty dbxenv run_pty device |
| -write (open executable and core file for writing) |
- |
|
Exiting | |
| quit Ctrl-d |
exit |
|
Executing shell commands | |
| shell command | ksh command /bin/sh command Note: you can use any ksh command, including function definition. See “help ksh differences” for limitations. |
|
Logging | |
| set logging show logging |
dbxenv session_log_file_name file dbxenv session_log_file_name |
| - |
dbxenv output_log_file_name file dbxenv output_log_file_name (logs only commands, not their output) |
| set logging redirect [on|off] | - Note: equivalent to off |
| set logging overwrite [on|off] | - Note: equivalent to on |
|
Commands (general) | |
| Abbreviation - automatic (can use 's' instead of 'step') | Need to use ksh 'alias' command to define aliases |
| Auto-completion with Tab | No auto-completion |
| Command repeat with Ret | Command repeat with '!' and UpArrow Ret |
|
Built-in help | |
| help [command] | help [command] |
| apropos keyword | help -k keyword |
|
Debugging information support | |
| stabs (GNU), dwarf2, -g -O | stabs (SUN), dwarf2, -g -O |
| Macro support (-g3) | Macro support (-g3); Sun Studio compilers don't generate debug info for macros, though. |
| (status unknown) | .ldynsym support (symbols in stripped loadobject) |
|
Starting a program | |
| run [arguments][ < input_file] [ > output_file | run [arguments][ < input_file] [ > output_file] |
| start (run and stop in “main”) |
- Note: only available in GUI mode when used from Sun Studio IDE |
|
Program environment | |
| set args args | runargs args |
| show args | debug |
| path dir | PATH=dir:$PATH |
| show paths | echo $PATH |
| set environment varname [=value ] | varname=value |
| unset environment varname | unset varname |
| cd directory | cd directory |
| pwd | pwd |
| - | any other ksh command (with certain limitations; see “help ksh differences”) |
|
Attaching | |
| attach pid | attach pid debug program pid debug - pid |
| detach | detach |
| - |
detach -stop |
|
Killing the child process | |
| kill | kill (builtin) /usr/bin/kill |
|
Debugging Multithreaded Applications | |
| info threads | threads |
| thread threadno | thread threadid |
| - |
thread -info [threadid] |
| - |
thread -blocks [threadid] thread -blockedby [threadid] |
| - |
syncs (list all synchronization objects). Note: available on Solaris only. |
| - |
sync -info addr (show information about the synchronization object). Note: available on Solaris only. |
| thread apply [threadno] [all] command | - |
| - | lwps |
| - | lwp lwpid |
| - | lwp [lwpid] -info (displays the name, home, and masked signals) |
| - | lwp [lwpid] -setfp addr lwp [lwpid] -resetfp (temporarily set frame pointer to specified value) |
| - | OpenMP support. |
|
Debugging Programs with Multiple Processes | |
| set follow-fork-mode parent | dbxenv follow_fork_mode parent |
| set follow-fork-mode child | dbxenv follow_fork_mode child |
| - |
dbxenv follow_fork_mode ask |
| set detach-on-fork on/off | - Note: always detaches; it is possible to debug both processes, but only using Sun Studio IDE |
| info forks fork fork-id detach fork fork-id delete fork fork-id |
- |
|
Process snapshots | |
| checkpoint info checkpoints restart checkpoint-id delete checkpoint checkpoint-id |
- Note: dbx has different mechanism for that; see “help save/restore/replace” commands for more information. |
|
Breakpoints | |
| break function | stop in function |
| break +offset break -offset |
stop at $[$lineno+offset] stop at $[$lineno – offset] Note: you can define helper function in .dbxrc that will save you from typing all that stuff. |
| break [filename:]linenum | stop at [filename:]linenum |
| break filename:function | - |
| break *address | stopi at address stop at address -instr |
| break (stop on next instruction in current stack frame) |
- Note: Can use “stopi at $npc”, but on sparc only |
| break ... if cond condition bnum expression |
stop ... -if cond |
| condition bnum (removes condition) |
- |
| tbreak args | stop ... -temp |
| - | stop inmethod func stop inmember func stop infunction func stop inclass classname [ -recurse | -norecurse ] inobject object_address [ -recurse | -norecurse ] |
| step; cont next; cont |
stop step stop next |
| catch signal [signame ] | stop sig signal [code] |
| - | stop fault |
| catch throw [ exceptname] Note: not very useful since stop after exception is thrown; doesn't work in code called from gdb |
intercept [-all] [-x] [-set] [typename] stop throw [-unhandled] [-unexpected] [typename] |
| catch catch [exceptname] | - Note: use “whocatches” command |
| catch stop | stop stop |
| - | stop attach stop detach |
| - | stop sync |
| - | stop syncrtld |
| - | stop lastrites (Solaris only) |
| catch load [ lib-path ] catch unload [ lib-path ] Note: unavailable on Linux and Solaris |
stop dlopen [ lib-path ] stop dlclose [ lib-path ] |
| - | stop exit [ exitcode ] |
| catch fork catch vfork catch exec Note: no other system calls are supported |
stop sysin [sysin code|name] stop sysout [sysin code|name] |
| finish Note: can't specify function to catch return from |
stop returns [func] Note: has bug(s), still unresolved. |
| - | stop lwp_exit (Solaris only) |
| catch exit catch start Note: not implemented on Linux and Solaris |
stop proc_gone stop prog_new |
| tcatch ... | stop ... -temp |
| - | stop timer seconds |
| watch variable Note: need to re-enable manually |
stop change variable |
| watch expr Note: need to re-enable manually |
stop if expr stop cond expr |
| mem addr-expr addr-expr mode | stop access mode addr-expr [ , byte-size-expr |
| rwatch awatch Note: need to re-enable manually, doen't work on Solaris and Linux. |
- |
| catch thread_start catch thread_exit |
stop thr_exit [-thread tid] stop thr_create [ tid ] |
| catch thread_join | - |
| - | stop ... -resumeone (when evaluating stop condition, resume only one thread). |
| - | stop ... -in func |
| ignore bnum count | stop ... -count count handler -count count bnum |
| break linespec thread threadno | stop ... -thread tid |
| - | stop ... -lwp lwpid |
| hbreak args thbreak args |
- |
| rbreak regex | - Note: need to use funcs command and manually set breakpoints with “stop in” |
| info breakpoints [n] info watchpoints [n] |
status [n] |
| clear clear linenum clear filename:linenum |
clear clear linenum clear filename:linenum |
| clear function clear filename:function |
- |
| delete [breakpoints] [range ...] | delete [breakpoints] delete all |
| Pending breakpoints | - Note: you can load shared library with “loadobject -load lib” and set breakpoints after that or run your program once without any breakpoints so that dbx become aware of all libraries. |
| set breakpoint auto-hw on/off | - |
| disable [breakpoints] [range ...] | handler -disable [breakpoints] |
| enable [breakpoints] [range ...] | handler -enable [breakpoints] |
| enable [breakpoints] once range ... enable [breakpoints] delete range ... |
- |
| commands [bnum ] ... command-list ... end |
when ... { cmd; } wheni ... { cmd; } |
| - | trace next trace at lineno trace in func trace modify addr-expr [ , byte-size-expr ] trace ... |
|
Continuing and Stepping | |
| continue [ignore-count ] fg [ignore-count ] |
cont |
| step [count] | step [count] [tid | lwpid] |
| next [count] | next [count] [tid | lwpid] |
| set step-mode on stepi [count] |
stepi [count] [tid | lwpid] |
| nexti [count] | nexti [count] [tid | lwpid] |
| - | step to [func] |
| - | step ... -sig signal |
| until [location] (Execute until the program reaches a source line greater than the current or specified location). |
- |
| advance location | cont at line |
|
Signals | |
| info signals info handle | catch, ignore |
| handle signal stop | catch signal |
| handle signal nostop | ignore signal |
| handle signal print | when sig signal { print $signal; print $sigstr; } trace sig signal |
| handle signal noprint | - Note: no information is printed about ignored signals |
| handle signal pass handle signal noignore |
ignore signal |
| handle signal nopass handle signal ignore |
- Note: use cont with no -sig to cancel current signal after stopping because of it |
|
Examining the Stack | |
| backtrace [n] bt [n] |
where [n] |
| backtrace [-n] bt [-n] |
- |
| backtrace full [n] | - |
| set backtrace past-main on/off | - |
| set backtrace past-entry on/off | - |
| - |
hide [ regular_expression ] unhide [ number | regular_expression ] unhide (hide stack frames in “where” command output) |
| set backtrace limit n set backtrace limit 0 (default is unlimited) |
dbxenv stack_max_size n Note: default is 100; no “unlimited” option |
| show backtrace limit | dbxenv stack_max_size echo $DBX_stack_max_size |
| frame [args] | frame [n] Note: can't use address to identify stack frame |
| select-frame [args] | > /dev/null frame [n] |
| up [n] down [n] |
up [n] down [n] |
| up-silently [n] down-silently [n] |
> /dev/null up [n] > /dev/null down [n] |
| frame | where 1 |
| info frame | - |
| info locals | dump |
| info catch | whocatches type |
|
Examining Source Files | |
| list linenum | list -w linenum |
| list function | list function |
| - |
list -a function (lists entire function) |
| list | list |
| list - | list -10 |
| set listsize count show listsize |
dbxenv output_list_size count dbxenv output_list_size |
| list first,last | list first,last |
| list ,last | list last, - [n] |
| list first, | list first,+[n] |
| list + | list [+N] |
| list - | list - [N] |
| list *address | - |
| - | file [filename] (view or set current file) |
| edit edit number edit function edit filename:number edit filename:function edit *address |
$EDITOR filename Note: need to find source file manually with 'whereis [-a]' command. |
| forward-search regexp search regexp |
search [string] |
| reverse-search regexp | bsearch [string] |
|
Specifying Source Directories | |
| directory dirname ... dir dirname ... directory |
use [dirname] Note: “use” is deprecated and replaced with pathmap. |
| set substitute-path from to | pathmap from to |
| unset substitute-path [path] | pathmap -d [path] |
| show substitute-path [path] | pathmap |
|
Source and Machine Code | |
| info line linespec | - Note: need to look at “list -i linespec” output |
| disassemble [addr] | dis [addr] |
| - | dis -a [addr] (disassemble entire function) |
| - | list -i [linespec] (intermix source lines and assembly code) |
|
Examining Data | |
| print /f expr | print -f expr |
| print /f | - |
| - | > FILE print ... (print to a file) |
| Artifcial arrays (p ) | - |
| - | Array slicing (p array[2..5]) |
| - | Pretty-printing (allows an application to provide it's own rendition of an expressions value through a function call, see “help prettyprint”). |
| x/nfu addr | x addr [/nf] examine addr [/nf] Note: unit size is governed by format, 'f' |
| display[/fmt] expr | display [-f fmt] expr |
| undisplay dnums ... delete display dnums ... |
undisplay dnums ... |
| disable display dnums ... enable display dnums ... |
- |
| display | display |
| - | watch (same as display, but expression is re-parsed at each stopping point) |
| set print address on/off | - |
| set print symbol-filename on/off | - |
| set print max-symbolic-offset max-offset | - |
| set print array on/off | - (equivalent to off) |
| set print array-indexes on/off | - (equivalent to off) |
| set print elements number-of-elements | - |
| set print repeats | - |
| set print null-stop | - |
| set print pretty on/off | - Note: equivalent to “on” |
| set print sevenbit-strings on/off | - |
| set print union on/off | - |
| set print demangle on/off set print asm-demangle on/off |
- Note: usually both forms are displayed |
| set print object on/off | print -d ... Note: equivalent to “on” |
| set print static-members on/off | - |
| set print vtbl on/off | - |
| $ (previously printed expression) |
- |
| show values (values history) |
- |
| Convenience variables Example: set $foo = *object_ptr Note: these variables are typed. |
Environment variables Example: foo=$[*object_ptr] Note: type of expression is not recorded in the variable. |
| show convenience | set |
| init-if-undefined $variable = expression | - |
| info registers | regs |
| info all-registers | regs -f | -F |
| info registers regname ... | print $regname |
| info float (floating point registers only) |
- |
| info vector | - |
| info udot | - |
| info auxv | - |
| cache nocache (cache target memory) |
- |
|
Memory access checking | |
| set mem inaccessible-by-default [on|off] | - |
| - | check -access |
| - | check -memuse |
| - | check -leaks |
|
C Preprocessor Macros | |
| macro expand expression macro exp expression |
- |
| macro expand-once expression | - |
| info macro macro | - |
| macro define macro [(arglist)] replacement-list macro undef macro |
- |
| macro list | - |
|
Examining the Symbol Table | |
| info address symbol | - Note: “print &symbol” should suffice. |
| info symbol addr | whereis -a addr Note: with 'check -memuse', shows allocation stack for heap-allocated memory region. |
| whatis arg | whatis [-e] arg |
| ptype arg | whatis [-e] arg |
| info types [regexp] | whatis -t [typename] |
| info scope location | - |
| info source | module -v file Note: dwarf info is not displayed correctly for object files. |
| info sources | modules -v files |
| info functions regexp | funcs regexp |
| info variables (All global and static variable names, or those matching REGEXP) |
- |
|
Altering execution | |
| set var=value | assign var=value |
| assign $reg=value | assign $reg=value |
| jump linespec | cont at linespec |
| jump *address | assign $pc=address; cont |
| signal signal | cont -sig signal |
| return | pop |
| return expression | - |
| print expr call expr Note: abnormal termination affects debuggee |
print expr call expr Note: abnormal termination doesn't affect debuggee; use “pop -c” to “cancel” call. |
| set unwindonsignal | - Note: equivalent to off |
| set write on/off (open executable or core for writing) |
- Note: equivalent to off |
| - | fix |
|
Debugging Information in Separate Files | |
| set debug-file-directory directory | dbxenv debug_file_directory directory |
| show debug-file-directory | dbxenv debug_file_directory |
|
Miscellaneous | |
| set prompt newprompt | PS1=newprompt PS2=secondprompt |
There's similar table in built-in dbx help. Use “help FAQ” and navigate to seciton A.1.