The Visual Studio debugger is implemented as a VSPackage and manages the entire debug session. The debug session comprises the following elements:
Debug Package: The Visual Studio debugger provides the same user interface no matter what is being debugged.
Session debug manager (SDM): Provides a consistent programmatic interface to the Visual Studio Debugger for the management of a variety of debug engines. It is implemented by Visual Studio.
Process debug manager (PDM): Manages, for all running instances of Visual Studio, a list of all programs that can be or are being debugged. It is implemented by Visual Studio.
Debug engine (DE): Is responsible for monitoring a program being debugged, communicating the state of the running program to the SDM and the PDM, and interacting with the expression evaluator and symbol provider to provide real-time analysis of the state of a program's memory and variables. It is implemented by Visual Studio (for the languages it supports) and third-party vendors who want to support their own run time.
Expression evaluator (EE): Provides support for dynamically evaluating variables and expressions supplied by the user when a program has been stopped at a particular point. It is implemented by Visual Studio (for the languages it supports) and third-party vendors who want to support their own languages.
Symbol provider (SP): Also called a symbol handler, maps the debugging symbols of a program to a running instance of the program so that meaningful information can be provided (such as source-code-level debugging and expression evaluation). It is implemented by Visual Studio (for the Common Language Runtime [CLR] symbols and the Program DataBase [PDB] symbol file format) and by third-party vendors who have their own proprietary method of storing debugging information.
The following diagram shows the relationship among these elements of the Visual Studio debugger.