GDB
GDB (the GNU Debugger) lets you run a program under controlled conditions — setting breakpoints, stepping through execution, inspecting memory and registers, and disassembling code. It is part of the GNU toolchain and is a staple for debugging and reverse engineering (see Reverse Engineering).
Install this cool GDB plugin GEF.
Compile with gcc’s -g flag to include debug symbols.