GDB note

Shorthand aliases

cl continue
cl clear Clear breakpoints in location
b break Set a breakpoint
bt backtrace
d delete Delete breakpoints/watchpoints/catchpoints by its number
l list Print current line of source code
rb rbreak Set a breakpoint using a regular expression
r run Run your program
u until
! shell Run shell command

Frontmost commands

rb regex Set breakpoints on all functions matching the regular expression regex
e.g.: rb ^ds will set breakpoints to all functions starting with ds
rb filename.c:. Set breakpoints on all functions in the filename.c
b open if strcmp($rdi,"~/error.log") == 0 Break when opening ~/error.log file
b read if $rdi == 12 When read a file with descriptior 12
cl filename:linenum Removes all breakpoints at the specified line clear function Removes all breakpoints from the function
d breakpoint_number Delete one breakpoint whose number is breakpoint_number
set filename-display <relative|absolute|basename>
set follow-fork-mode <parent|child|ask> Set following mode when perform a fork()
set follow-exec-mode <new|same> Lets the process bound to the same/new inferior when performing exec
set print elements 0 Don't limit when printing
win Show source code in a windows (if available)
set $myvar_main_addr = &main Set convinience variable set $mydigit = 0
show convenience or show conv # Show convinience variables
show environment or show env
bt <num> Trace last funtions from stack
u <num> or until <num> # Run to line of the current source
wa <variable> or watch <variable> # Catch a variable change
commands [list] Use afrer the b command to invoke other gdb commands. See more
e.g.:

b foo if i!=43
      commands
      silent
      printf "i=%d\n",i
      sum+=u
      cont
      end
      

! or shell To run a command in shell.
e.g.: (gdb) !ls -alh (gdb) !pwd (gdb) !whoami

The convenience variables $_shell_exitcode and $_shell_exitsignal can be used to examine the exit status of the last shell command launched by shell, make, pipe and |

To show stdout in another terminal get another's treminal number
$ tty /dev/pts/1
and type it in gdb's console
(gdb) tty /dev/pts/1.
Or it can be done like this:
gdb -tty <TTY_PATH> --args ./my_progtam <arguments> TTY_PATH is like /dev/pts/1

call foo() or p foo() To call a function from your program

info proc <files><stat><status> See process info in gdb more or
info proc to get PID and then shell ll /proc/<PID>/fd

Coloring prompt: type of add to ~/.gdbinit
set prompt \033[0;34m(gdb) \033[0m 0;32m is also a nice color

set print address off Can be done to make bt nice-looking

set detach-on-fork off Retain control over forked processes, including nested forks
info infe Print a list of all inferiors
infe <N> Switch from one fork to another

generate-core-file Produce a core file from your program

$ gdb -c <core_file> Read the core file
sharedlibrary Load symbols form shared libraries
symbol-file </path/to/binary> Read symbols from the binary more
set solib-search-path /path/to/libs Set path to libs (do before loading the core) core /path/to/core/dump Load core during runnig (after setting solib-search-path)

.gdbinit

My ~/.gdbinit:

# b foobar - don\'t try setting breakpoints from here - they won\'t work.
      
      set follow-fork-mode child
      set follow-exec-mode same
      set detach-on-fork off
      set print address off
      set print elements 0
      set prompt \033[0;34m(gdb) \033[0m
      set confirm off
      
      
      define pp
          set follow-fork-mode parent
      end
      
      define cc
          set follow-fork-mode child
      end
      
      define ii
          info inferiors
      end
      
      define i1
          inferior 1
      end
      

https://sourceware.org/gdb/onlinedocs/gdb/
https://jvns.ca/blog/2018/01/04/how-does-gdb-call-functions/