This document discusses using the GNU Debugger (GDB) to debug programs. It begins with an introduction to GDB and why it is useful. Examples are then provided of using GDB for interactive debugging, examining core dumps, patching binaries, and advanced tricks. A real-world case study demonstrates using GDB to debug a crash in the GNU C library by examining assembly code and source-level debugging with debug symbols. The document concludes by mentioning another case study involving hijacking file descriptors in GDB.