Debugger Interface

The Debugger object is used to interrogate and manipulate the state of the debugger and the program being debugged.

Namespace:  EnvDTE
Assembly:  EnvDTE (in EnvDTE.dll)


<GuidAttribute("338FB9A0-BAE5-11D2-8AD1-00C04F79E479")> _
Public Interface Debugger
public interface Debugger
public interface class Debugger
type Debugger =  interface end
public interface Debugger

The Debugger type exposes the following members.


  Name Description
Public property AllBreakpointsLastHit Gets a collection of bound breakpoints that were last simultaneously hit.
Public property BreakpointLastHit Gets the last breakpoint hit.
Public property Breakpoints Gets a collection of breakpoints.
Public property CurrentMode Gets the current mode of the debugger within the context of the integrated development environment (IDE).
Public property CurrentProcess Sets or gets the active process.
Public property CurrentProgram Sets or gets the active program.
Public property CurrentStackFrame Sets or gets the current stack frame.
Public property CurrentThread Sets or gets the current thread being debugged.
Public property DebuggedProcesses Gets the list of processes currently being debugged.
Public property DTE Gets the top-level extensibility object.
Public property HexDisplayMode Gets or sets whether expressions are output in hexadecimal or decimal format.
Public property HexInputMode Gets or sets whether expressions are evaluated in hexadecimal or decimal format.
Public property Languages Gets a list of languages that the debugger supports.
Public property LastBreakReason Gets the last reason that a program was broken. If the program is running it returns DBG_REASON_NONE.
Public property LocalProcesses Gets the list of processes currently running on this machine.
Public property Parent Gets the immediate parent object of a Debugger object.



  Name Description
Public method Break Causes the given process to pause its execution so that its current state can be analyzed.
Public method DetachAll Detaches from all attached programs.
Public method ExecuteStatement Executes the specified statement. If the TreatAsExpression flag is true, then the string is interpreted as an expression, and output is sent to the Command Window.
Public method GetExpression Evaluates an expression based on the current stack frame. If the expression can be parsed but not evaluated, an object is returned but will not contain a valid value.
Public method Go Starts executing the program from the current statement.
Public method RunToCursor Executes the program to the current position of the source file cursor.
Public method SetNextStatement Sets the next instruction to be executed, according to the cursor position in the current source file.
Public method StepInto Steps into the next function call, if possible.
Public method StepOut Steps out of the current function.
Public method StepOver Steps over the next function call.
Public method Stop Stops debugging, terminating, or detaching from all attached processes.
Public method TerminateAll Terminates all processes.



The debugger is available through the DTE object by way of its Debugger property, as shown in the example below. One debugger object is available for each instance of the development environment.


The following example demonstrates how to use Debugger object.

Imports EnvDTE
Imports System.Diagnostics

Public Module Module1
    ' This function returns true if the debugger is actively debugging.

    Function IsDebugging() As Boolean
        Dim debugger As EnvDTE.Debugger
        debugger = DTE.Debugger

        If (debugger Is Nothing) Then
            MsgBox("Debugger doesn't exist! Fatal error.")
            IsDebugging = false
            IsDebugging = (debugger.CurrentMode <> dbgDebugMode.dbgDesignMode)
        End If
    End Function
End Module
// The following small C++ program can be run from the command line.
// It detects whether an instance of Visual Studio is currently 
// running,and if so, prints a message stating whether its debugger
// is actively debugging.

#include <stdio.h>
#import "dte.olb" raw_interfaces_only named_guids

using namespace EnvDTE;

int main(void)
    int nRet = 0;


    IUnknownPtr pUnk;
    GetActiveObject(CLSID_DTE, NULL, &pUnk);

    if (pUnk == NULL) {
        printf ("No instance of Visual Studio is running.\n");
    else {
        _DTEPtr pDTE = pUnk;
        if (pDTE) {
            DebuggerPtr pDebugger;
            if (SUCCEEDED(pDTE->get_Debugger(&pDebugger)) && pDebugger != NULL){
                dbgDebugMode mode;
                if (SUCCEEDED(pDebugger->get_CurrentMode(&mode))) {
                    if (mode != dbgDesignMode) {
                        printf("Debugger is active.\n");
                        nRet = 1;
                    else {
                        printf("Debugger is not active.\n");


    return nRet;

See Also


EnvDTE Namespace

Other Resources

Automation Object Model Chart

Debugging in Visual Studio