Debugger Internals
It is the debugger’s job to convert the debug info into an in-memory representation. Both the interpretation of the debug info and the in-memory representation are arbitrary; anything will do so long as meaningful information can be reconstructed while the program is running. The pipeline from raw debug info to usable types can be quite complicated.
Once the information is in a workable format, the debugger front-end then must provide a way to interpret and display the data, a way for users to interact with it, and an API for extensibility.
Debuggers are vast systems and cannot be covered completely here. This section will provide a brief overview of the subsystems directly relevant to the Rust debugging experience.
Microsoft’s debugging engine is closed source, so it will not be covered here.