gdb Cheat Sheet



GDB Cheat Sheet
===============

Start up gdb with a program:

>gdb programName

--OR-- run gdb from within emacs.  This is preferable, as you can
 then have multiple buffers open showing you context, etc. 
Start emacs and type:  M-x gdb
Very helpful to use the speedbar while debugging to aid in visiting
 files and switching between buffers

(gdb) [RET]         Repeat previous comamnd.
                    After you have entered a command once, hitting return
                    repeats that command. For example, (gdb) n   steps one
                    command. Then just hit return to continue stepping.
(gdb) break main    Set a breakpoint at the entry point to main
(gdb) run           Run to first breakpoint
(gdb) start         Runs to the beginning of main
(gdb) run CL_arg    Run to first breakpoint, using a command-line arg
(gdb) n             Next command (step over)
(gdb) bt            Backtrace, shows where in the stack from you are
(gdb) s             "s"tep into a function
(gdb) up #          Go up # levels in the call stack. Eg, "up 1" shows cur. calling function.
                    Use "finish" to step out of current function.
(gdb) file execName      Starts a new file to be debugged (can use tabbing and dired to find).
(gdb) info breakpoints	 Displays all break points. "info b" also works
(gdb) C-x [SPACE]   Within gdb mode in emacs, sets a BP at the point in the
                    source file you are editing.
(gdb) break NS::ClasssName::FunctionName   Set a breakpoint in a namespace, 
                                           class, function
(gdb) break NS1::NS2::ClasssName::FunctionName   Set a breakpoint in nested
                                                 namespaces, class, function

      Can type tab during entering of the namespace / class / function 
      for emacs-like auto-completion.

(gdb) break filename:line#    Set a breakpoint in a file at the line #.
(gdb) l             "l"ist source lines for context (lists several lines above
                    and below current line).
(gdb) info locals	shows local variable values
(gdb) return (exp)	steps out of a function. (exp) will optionally
                    override actual return val.
(gdb) continue		re-start program execution.
(gdb) disable #		Disable the breakpoint # (use "info breakoints"
                    to see breakpoint numbers).
(gdb) enable #      Enables BP #
(gdb) delete #		Deletes BP #   (also "d #")
(gdb) delete        Deletes all BPs  (also "d")
(gdb) finish        Continues until current function has ended
(gdb) until NS1::NS2::ClasssName::FunctionName   Runs until reaches this point
                    or another line past this. Can use filename:line# syntax
                    like break.
(gdb) print var		Prints the contents of a variable
(gdb) print vect[1].val()      prints from a vector called vect, the 
                    [1] positioned element, the value
                    returned by calling the function val().
(gdb) display var   Display the value of var after each step
(gdb) kill          Kill execution of program being debugged.
(gdb) quit          Quit gdb altogether
(gdb) cd ...        cd to a new working directory. This sets the cwd for the
                    session (in case you want to start the session in a different
                    working directory than the one where the exe is located.)
(gdb) print var.px->func()     how to print the value a function from a 
                               variable that is a boost::smart_ptr.
(gdb) break [place] if cond    breaks at [place] (choose a place as with BPs above) if
                               the condiditon cond is met.

   EX:  (gdb) break TestGame.cpp:250 if (boolVar == false)

(gdb) where         Displays where you are as well as the calling chain 
                    (the sequence of func calls that lead us to this point.)

-------------

A lot of commands can be accessed by:

M-x gdb-xxxxxxxx   where the xxxxxxx is a gbd command.

M-x gdb-display-locals-buffer       - display local vars in a separate buffer

                    
© 2019  Give Me Fish, LLC