Core Interfaces

The following interfaces are the core interfaces for extending debugger by using the Visual Studio SDK.

Discussion

These interfaces are primarily used to create the debug engine (DE). They are organized here by categories:

Breakpoints

These interfaces are related to the implementation and tracking of breakpoints.

Interface Implemented by Description
IDebugBoundBreakpoint2 DE Represents a breakpoint bound to a memory location.
IDebugBreakpointBoundEvent2 DE Sent by the DE when a breakpoint is bound to a memory location.
IDebugBreakpointChecksumRequest2 VS Represents a document checksum for a breakpoint request.
IDebugBreakpointErrorEvent2 DE Sent by the DE when a breakpoint fails to be bound to a memory location.
IDebugBreakpointEvent2 DE Sent by the DE when a breakpoint is reached.
IDebugBreakpointRequest2 VS Represents a request for a breakpoint; used in creating a pending breakpoint.
IDebugBreakpointRequest3 VS Represents a request for a breakpoint; used in creating a pending breakpoint.
IDebugBreakpointResolution2 DE Represents the information used to bind a breakpoint.
IDebugBreakpointUnboundEvent2 DE Sent by the DE when a breakpoint is unbound from a memory location.
IDebugErrorBreakpoint2 DE Represents an invalid breakpoint (returned by IDebugBreakpointErrorEvent2).
IDebugErrorBreakpointResolution2 DE Represents the resolution information about an invalid breakpoint.
IDebugFunctionPosition2 DE Represents a position in a function where a breakpoint is set.
IDebugPendingBreakpoint2 DE Represents a breakpoint that is to be bound; used in creating a bound breakpoint.
IEnumDebugBoundBreakpoints2 DE Represents an enumeration over a set of bound breakpoints.
IEnumDebugErrorBreakpoints2 DE Represents an enumeration over a set of breakpoints that could not be bound to a memory location.

Contexts

These interfaces represent various kinds of contexts within the program being debugged.

Interface Implemented by Description
IDebugCodeContext2 DE Represents the starting position of a code instruction.
IDebugCodeContext3 DE Extends the IDebugCodeContext2 interface to enable the retrieval of module and process interfaces.
IDebugDocumentContext2 VS, DE Represents a position in a document.
IDebugExpressionContext2 DE Represents the context in which to evaluate an expression.
IDebugMemoryContext2 DE Represents the starting location in memory of a collection of bytes.
IDebugStackFrame2 DE Represents a stack frame context at a breakpoint or exception.
IDebugStackFrame3 DE Represents a stack frame context at a breakpoint or exception.
IEnumDebugCodeContexts2 DE Represents an enumeration over a set of code contexts.

Core Server

These interfaces represent the machine on which a program is being debugged. These are implemented by Visual Studio but can be called into by debug engines.

Interface Implemented by Description
IDebugCoreServer2 VS Provides access to ports and port suppliers as well as information about the computer.
IDebugCoreServer3 VS Represents an IDebugCoreServer2 that supports remote debugging.

Debug Engines

These interfaces represent debug engines and their associated events.

Interface Implemented by Description
IDebugEngine2 DE Represents a custom debug engine.
IDebugEngine3 DE Represents a custom debug engine that supports loading of symbols, JustMyCode, and exceptions.
IDebugEngineCreateEvent2 DE Sent by each new instance of the DE to indicate it is ready to handle debugging tasks.
IDebugEngineLaunch2 DE Represents a custom debug engine that supports launching programs.
IDebugProgramEngines2 DE, PS Represents a program node that handles multiple debug engines.
IDebugQueryEngine2 DE Provides a way for the SDM to obtain an interface to the debug engine from a thread, program, or stack frame.

Documents

These interfaces represent documents (source files) and their associated elements.

Interface Implemented by Description
IDebugActivateDocumentEvent2 DE Sent by the DE to request a document to be opened.
IDebugDisassemblyStream2 DE Represents a stream of disassembled instructions from a document.
IDebugDocument2 VS, DE Represents a document supplied by the DE, specifying a name and a class ID (CLSID).
IDebugDocumentChecksum2 DE, EE Represents a checksum for a debug document and enables passing the checksum between components.
IDebugDocumentContext2 VS, DE Represents a document context, a position within a document corresponding to a particular statement and code context.
IDebugDocumentPosition2 VS, DE Represents a general position within a document.
IDebugDocumentPositionOffset2 VS Represents a position in a source file as a character offset.
IDebugDocumentText2 VS, DE Represents a text document supplied by the DE (derived from IDebugDocument2), supplying the actual text.
IDebugDocumentTextEvents2 DE Sent by the DE to specify changes to a source file that is in memory.

Events

These interfaces represent all events that are sent between the DE and the session debug manager (SDM).

Interface Implemented by Description
IDebugActivateDocumentEvent2 DE Sent by the DE to request a document to be opened.
IDebugBeforeSymbolSearchEvent2 DE The debug engine (DE) sends this interface to the session debug manager (SDM) to set the status bar message during symbol loads.
IDebugBreakEvent2 DE Sent by the DE when a break in the program has been completed.
IDebugBreakpointBoundEvent2 DE Sent by the DE when a breakpoint is bound.
IDebugBreakpointErrorEvent2 DE Sent by the DE when a breakpoint fails to be bound.
IDebugBreakpointEvent2 DE Sent by the DE when a breakpoint is reached.
IDebugBreakpointUnboundEvent2 DE Sent by the DE when a breakpoint is unbound.
IDebugCanStopEvent2 DE Sent by the DE to determine whether it should stop at a particular location.
IDebugDocumentTextEvents2 DE Sent by the DE to specify changes to a source file that is in memory.
IDebugEngineCreateEvent2 DE Sent by each new instance of the DE to indicate it is ready to handle debugging tasks.
IDebugEntryPointEvent2 DE Sent by the DE to indicate the program being debugged is ready to execute the first instruction.
IDebugErrorEvent2 DE An interface that is used by other event interfaces, which might return an error, to provide human-readable error messages.
IDebugEvent2 DE, PS Base interface from which all other event interfaces are derived.
IDebugEventCallback2 VS Represents an interface implemented by the SDM to which events (expressed as objects implementing a particular event interface) are sent.
IDebugExceptionEvent2 DE Sent by the DE when an exception has occurred in the program being debugged.
IDebugExpressionEvaluationCompleteEvent2 DE Sent by the DE when an asynchronous expression evaluation is complete.
IDebugFindSymbolEvent2 OBSOLETE. DO NOT USE.
IDebugInterceptExceptionCompleteEvent2 DE Sent by the DE when processing for an intercepted exception has been completed.
IDebugLoadCompleteEvent2 DE Sent by the DE when a program has completed loading.
IDebugMessageEvent2 DE Sent by the DE to have the IDE display an informational message to the user.
IDebugModuleLoadEvent2 DE Sent by the DE when a module is loaded or unloaded.
IDebugNoSymbolsEvent2 DE Signals the Visual Studio debugger UI to warn the user that symbols could not be located for the launched executable.
IDebugOutputStringEvent2 DE Sent by the DE to have the IDE display an arbitrary string.
IDebugPortEvents2 VS, DE Sent by a port to communicate port events to any listener.
IDebugProcessCreateEvent2 DE, PS Sent by the DE or port when a process has been created.
IDebugProcessDestroyEvent2 DE, PS Sent by the DE or port when a process has been destroyed.
IDebugProgramCreateEvent2 DE, PS Sent by the DE or port when a program has been created.
IDebugProgramDestroyEvent2 DE, PS Sent by the DE or port when a program has been destroyed.
IDebugProgramDestroyEventFlags2 DE Enables a debug engine to override the default behavior of the Visual Studio UI when you end a debug session.
IDebugProgramNameChangedEvent2 DE Sent from the debug engine (DE) to the session debug manager (SDM) when the name of a program changes.
IDebugPropertyCreateEvent2 DE Sent by the DE when a new property (represented by the IDebugProperty2 interface) has been created.
IDebugPropertyDestroyEvent2 DE Sent by the DE when a property has been destroyed.
IDebugReturnValueEvent2 DE Sent by the DE when stepping out of or over a function so the return value can be correctly displayed.
IDebugSettingsCallback2 VS Enables debug engines to read metric settings remotely.
IDebugStepCompleteEvent2 DE Sent by the DE when a step into, over, or out of an instruction has been completed.
IDebugSymbolSearchEvent2 DE Sent by the DE to indicate the success or failure of loading symbols for a module.
IDebugThreadCreateEvent2 DE Sent by the DE when a thread has been created.
IDebugThreadDestroyEvent2 DE Sent by the DE when a thread has been destroyed.
IDebugThreadNameChangedEvent2 DE Sent by the DE when a thread has changed its name.

Expressions

These interfaces represent expressions to be evaluated in a particular context.

Interface Implemented by Description
IDebugExpression2 DE Represents an expression to be evaluated. Obtained from the IDebugExpressionContext2 interface.
IDebugExpressionContext2 DE Represents a context in which an expression is evaluated. Obtained from the IDebugStackFrame2 interface.
IDebugExpressionEvaluationCompleteEvent2 DE Sent by the DE when an asynchronous expression evaluation is complete.

Memory

These interfaces represent sequences of bytes in memory.

Interface Implemented by Description
IDebugMemoryBytes2 DE Represents a sequence of bytes in memory that can be read from or written to.
IDebugMemoryContext2 DE Represents a location in memory of a sequence of bytes.

Modules

These interfaces represent a module, which corresponds to an executable or .DLL file.

Interface Implemented by Description
IDebugModule2 DE Represents a single executable or DLL.
IDebugModule3 DE Represents an IDebugModule2 that supports symbols.
IDebugModuleLoadEvent2 DE Sent by the DE when a module is loaded or unloaded.
IDebugSourceServerModule DE Represents the source server information that is contained in a PDB file.
IEnumDebugModules2 DE Represents an enumeration over a set of modules that are known by an IDebugProgram2.

Ports

These interfaces represent ports and port suppliers.

Interface Implemented by Description
IDebugDefaultPort2 VS, PS Represents the default port on the local computer.
IDebugFirewallConfigurationCallback2 VS Enables a debug engine that uses DCOM to ask the Visual Studio UI to make sure that the firewall will not block remote debugging.
IDebugPort2 VS, PS Represents a port.
IDebugPortEvents2 PS Sent by a port to communicate port events to any listener.
IDebugPortEx2 PS Represents a port that can launch and terminate processes.
IDebugPortNotify2 PS Used to register and unregister programs with a port; allows the port to track programs currently being debugged.
IDebugPortPicker PS Represents a customized UI for selecting the port.
IDebugPortRequest2 VS Represents a request for a port from which a new port will be created or located.
IDebugPortSupplier2 PS Represents a supplier of ports.
IDebugPortSupplier3 PS Represents a supplier of ports that can persist (save to disk) information about the ports it created.
IDebugPortSupplierDescription2 PS Enables the Visual Studio UI to display text inside the Transport Information section of the Attach to Process dialog box.
IDebugWindowsComputerPort2 VS Allows querying for information about the target computer.
IEnumDebugPorts2 VS, PS Represents an enumeration over a set of ports.
IEnumDebugPortSuppliers2 VS Represents an enumeration over a set of port suppliers.

Processes

These interfaces represent processes, a single executable that contains one or more programs.

Interface Implemented by Description
IDebugProcess2 PS, DE Represents a process that is running on a computer.
IDebugProcess3 PS, DE Represents a process that actively supports debugging (used to replace Step, Continue, and Execute methods on the IDebugProgram2 interface).
IDebugProcessCreateEvent2 DE, PS Sent by the DE or port when a process has been created.
IDebugProcessDestroyEvent2 DE, PS Sent by the DE or port when a process has been destroyed.
IDebugProcessEx2 PS Represents a process that must track which session is attached to it.
IEnumDebugProcesses2 PS Represents an enumeration of a set of processes on a port.

Programs

These interfaces represent programs, logical units of execution that do not necessarily correspond to a physical executable or module.

Interface Implemented by Description
IDebugEngineProgram2 DE Represents an IDebugProgram2 that needs to work in concert with other programs being debugged at the same time.
IDebugProgram2 DE, PS Represents a logical unit of execution.
IDebugProgramCreateEvent2 DE, PS Sent by the DE or port when a program has been created.
IDebugProgramDestroyEvent2 DE, PS Sent by the DE or port when a program has been destroyed.
IDebugProgramEngines2 DE, PS Represents an IDebugProgramNode2 that can be handled by multiple debug engines.
IDebugProgramEx2 PS Represents an IDebugProgram2 that must be able to track which session is attached to it.
IDebugProgramHost2 DE, PS Represents an IDebugProgram2 that can return information about the process in which it is running.
IDebugProgramNode2 DE, PS Represents a program that can be debugged.
IDebugProgramNodeAttach2 DE, PS Allows a program node to be notified of an attempt to attach to the associated program.
IDebugProgramProvider2 DE Provides a way for the SDM to query a DE about the programs controlled by that DE.
IDebugProgramPublisher2 VS Used by DEs to register programs with the SDM to show they are being debugged.
IDebugProviderProgramNode2 DE, PS Represents an IDebugProgramNode2 that can marshal interfaces across thread or process boundaries.
IEnumDebugPrograms2 DE, PS Represents an enumeration of a set of programs.

Properties

These interfaces represent properties, a value associated with a particular context, usually the result of an expression evaluation.

Interface Implemented by Description
IDebugCustomViewer EE Represents an IDebugProperty2 that can display its value in a custom way.
IDebugProperty2 DE Represents a value of a stack frame, document, or the result of an expression evaluation.
IDebugProperty3 DE Represents an IDebugProperty2 that supports arbitrarily long strings.
IDebugPropertyCreateEvent2 DE Sent by the DE when a new property (represented by the IDebugProperty2 interface) has been created.
IDebugPropertyDestroyEvent2 DE Sent by the DE when a property has been destroyed.
IDebugReference2 DE Represents a reference to a property which can exist outside any particular stack frame.
IEnumDebugPropertyInfo2 DE Represents an enumeration over a set of DEBUG_PROPERTY_INFO structures which describe variables, registers, parameters, and expressions.
IEnumDebugReferenceInfo2 DE Represents an enumeration over a set of DEBUG_REFERENCE_INFO structures.

Stack Frames

These interfaces represent a stack frame, a context in which a breakpoint or exception has occurred.

Interface Implemented by Description
IDebugStackFrame2 DE Represents a context in which a breakpoint or exception has occurred.
IDebugStackFrame3 DE Represents an IDebugStackFrame2 which can handle intercepted exceptions.
IEnumCodePaths2 DE Represents an enumeration over the set of CODE_PATH structures which specify the function call sequence used to arrive at a particular stack frame.
IEnumDebugFrameInfo2 DE Represents an enumeration over a set of FRAMEINFO structures, which describe stack frames.

Threads

These interfaces represent threads and their associated events.

Interface Implemented by Description
IDebugThread2 DE Represents a thread of execution.
IDebugThreadCreateEvent2 DE Sent by the DE when a thread has been created.
IDebugThreadDestroyEvent2 DE Sent by the DE when a thread has been destroyed.
IDebugThreadNameChangedEvent2 DE Sent by the DE when a thread has changed its name.
IEnumDebugThreads2 DE Represents an enumeration over a set of threads.

Type Visualizers

These interfaces provide support for type visualizers. These interfaces are typically implemented by an expression evaluator.

Interface Implemented by Description
IEEDataStorage EE Represents an array of bytes to be presented to a type visualizer.
IPropertyProxyEESide EE Provides methods for getting access to data to be passed to a type visualizer.
IPropertyProxyProvider EE Represents a property that provides access to IPropertyProxyEESide implementations.

See also