gdb consists of three major subsystems: user interface, symbol handling (the symbolside), and target system handling (the target side).
The user interface consists of several actual interfaces, plus supporting code.
The symbol side consists of object file readers, debugging info interpreters, symbol table management, source language expression parsing, type and value printing.
The target side consists of execution control, stack frame analysis, and physical target manipulation.