Mono Soft Debugger API

This API is used to communicate with the debugging agent running inside a mono runtime.

The API is based on and is very similar to the Java Debug Interface. If documentation is missing, the JDI documentation can be consulted instead.

In this documentation, debuggee refers to the remote process running the mono runtime which this API communicates with.

A Mirror object represents an entity in the debuggee. There is usually one mirror subclass for each type of entity, i.e. TypeMirror for types, AppDomainMirror for application domains etc. These classes usually have a similar set of properties/methods as their non-mirror counterparts, the difference is that calling these properties/methods might result in a remote call to the debuggee to request information. The results of these remote calls are usually cached in the mirror object, so when multiple calls are made to TypeMirror.Name, for example, only the first call involves a remote operation. The ToString()/Equals()/GetHashCode () methods are an exception, these are guaranteed to only access local state.

Differences between this API and JDI:

There is only one namespace, instead of 5 in JDI.
The API uses classes, while JDI uses interfaces.
No SPI interface yet.
Information is accessed using C# properties instead of methods.
There are fewer classes, i.e. EventQueue/EventRequestManager is integrated into VirtualMachine.
Values which have primitive types i.e. int are represented by a class called PrimitiveValue, instead of a separate class for each primitive type.