!!GDB - GNU debugger gdb without any arguments automatically uses a.out C programs should be compiled with -g -Og To make a program produce a core file for debugging with gdb after-the-fact do: {{{ulimit -c unlimited}}} {{{gdb myProgram [core]}}} | run [[args] | r | run the program | kill | k | stop program from running | quit | q | exit debugger | help | h | | ^C | | stop / interrupt the program | continue | c | continue execution | list | l | show program code | next | n | go __over__ next line | step | s | go __into__ next line | finish | fin | exit stack frame (go __up__) | print x | p | print value of x | backtrace | bt | show stack | frame n | f | change to stack frame n | info locals | i lo | display local variables | info args | i ar | display command line arguments | info frame | i f | stack frame information !Breakpoints | break file.c:45 | b | set breakpoint at line 45 of file.c | break myfun | b | set breakpoint at beginning of myfun() | info breakpoints | i br | list breakpoints | disable 2 | | disable breakpoint 2 | clear XXXX | cl | delete breakpoint at location XXXX | delete nnn | d | delete breakpoint number nnn When lines are displayed, it is showing the line that is about to be executed, not the line that was just executed.