Can you post your most tricky and useful commands while you run a debugger like gdb or dbx.
12 Answers
- backtrace full: Complete backtrace with local variables
- up, down, frame: Move through frames
- watch: Suspend the process when a certain condition is met
- set print pretty on: Prints out prettily formatted C source code
- set logging on: Log debugging session to show to others for support
- set print array on: Pretty array printing
- finish: Continue till end of function
- enable and disable: Enable/disable breakpoints
- tbreak: Break once, and then remove the breakpoint
- where: Line number currently being executed
- info locals: View all local variables
- info args: View all function arguments
- list: view source
- rbreak: break on function matching regular expression
-
7`info locals` -- View all local variables; list -- view source; rbreak -- break on function matching regular expression. – Paul Biggar Sep 27 '09 at 10:53
-
source /path/to/macro/file And all of my nifty macros are there to help me debug in seconds. – Sudhanshu Jan 13 '10 at 05:19
-
1`set print object on` for polymorphic elements and `set print elements 0` are two commands I use very often. Pretty useful. – Kiril Kirov Jul 17 '14 at 09:04
-
1Also, `t a a bt` (meaning `thread apply all backtrace`). Could be used with (almost) all other commands. Especially useful with `bt full`. – Kiril Kirov Jul 17 '14 at 09:10
-
Start gdb with a textual user interface
gdb -tui

- 123,847
- 25
- 243
- 454
-
22I cannot believe this feature escaped me for all these years. Thank you, thank you, thank you! – DevSolar Dec 15 '09 at 13:55
-
-
2
-
1
-
Starting in gdb 7.0, there is reversible debugging, so your new favourite commands are:
* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

- 3,239
- 6
- 31
- 40

- 27,579
- 21
- 99
- 152
Instead of launching GDB with "-tui" param you can also switch to text mode after a while using by typing "wh".

- 1,106
- 2
- 9
- 11
-
3
-
2
-
6`Ctrl-a a`? Is it a joke? Looks more like `tmux`/`screen` command. And doesn't work for me. It must be one of [as](http://stackoverflow.com/questions/8409540/how-to-close-layout-src-windows-in-gdb) per [docs](https://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html#TUI-Keys): `C-x C-a`, `C-x a`, `C-x A`. – x-yuri Oct 08 '15 at 21:49
-
It's actually `C-x a`. You can also switch views with `C-x 1` and `C-x 2` when in tui mode to see assembly as well (if need be). – Sam Oct 16 '17 at 13:06
thread apply all bt
or thread apply all print $pc
: For finding out quickly what all threads are doing.
-
That was the command I was looking for a long-long time! It is really nasty to check all 30 threads one by one! – tothphu Apr 28 '13 at 23:57
-
scripting gdb is a good trick, other than that I like set scheduler locking on / off to prevent the running of other threads when you are stepping in one.

- 7,372
- 8
- 38
- 46
-
1
-
4
-
how do you make this the default? I tried it .gdbinit but gdb prints /home/omry/.gdbinit:1: Error in sourced command file: Target 'None' cannot support this command. – Omry Yadan Nov 26 '14 at 01:44
Using the -command=<file with gdb commands>
option while firing up gdb. Same as -x <command file>
. This command file can contain gdb commands like breakpoints, options, etc. Useful in case a particular executable needs to be put through successive debug runs using gdb.

- 2,502
- 1
- 23
- 38

- 236
- 4
- 12
-
You can also use the `-iex` option to add individual commands on the gdb command line. – doug65536 Apr 30 '17 at 10:21
- Using .gdbinit (start up file where you can write macros and call from gdb). Place .gdbinit in your home directory so that it is picked up every time gdb is loaded
info threads to list all the active threads, and f(#) -> # thread number you want to switch to
sometime i use gdb to convert from hex to decimal or binary, its very handy instead of opening up a calculator
- p/d 0x10 -> gives decimal equivalent of 0x10
- p/t 0x10 -> binary equivalent of 0x10
- p/x 256 -> hex equivalent of 256

- 947
- 1
- 7
- 14
Instead of starting gdb with the option -tui to see a child process that contains a screen that highlights where the executing line of code is in your program, jump in and out of this feature with C-x o and C-x a. This is useful if you're using the feature and what to temporarily not use it so you can use the up-arrow to get a previous command.

- 61,572
- 58
- 208
- 243
-
3you can change the focus to the command window using `focus cmd` so that the up/down arrows work. You switch back using `focus src`. – Nathan Fellman Aug 11 '14 at 11:14
This can be useful, I am sure it could be improved though, help welcome:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)

- 31,633
- 21
- 64
- 68