This document provides an overview of debugging tools and techniques, focusing on the GNU Debugger (GDB). It discusses GDB basics like breakpoints, printing variables, and stepping through code. It also covers more advanced GDB features like visual mode, examining call frames, setting watchpoints, and reverse debugging. The document recommends using compiler flags for debugging, and introduces complementary tools like Valgrind and Clang sanitizers. It concludes that writing debuggable code through assertions and logging is the first step to troubleshooting bugs.