Monitoring Events

For an overview of events in the debugger engine, see Events.

Events occurring in a target or the debugger engine may be monitored using the IDebugEventCallbacks interface. An IDebugEventCallbacks object may be registered with a client using SetEventCallbacks. Each client can only have at most one IDebugEventCallbacks object registered with it.

When an IDebugEventCallbacks object is registered with a client, the engine will call the object's IDebugEventCallbacks::GetInterestMask to determine which events the object is interested in. Only events in which the object is interested will be sent to it.

For each type of event, the engine calls a corresponding callback method on IDebugEventCallbacks. For events from the target, the DEBUG_STATUS_XXX value returned from these calls specifies how the execution of the target should proceed. The engine collects these return values from each IDebugEventCallbacks object it calls and acts on the one with the highest precedence.

Events from the Target That Break into the Debugger by Default

The following events break into the debugger by default:

  • Breakpoint Events

  • Exception Events (not documented here)

  • System Error

Events from the Target that Do Not Break into the Debugger by Default

The following events do not break into the debugger by default:

  • Create Process Event

  • Exit Process Event

  • Create Thread Event

  • Exit Thread Event

  • Load Module Event

  • Unload Module Event

Internal Engine Changes

The following are not actual events, but are merely internal engine changes:

  • Target Change

  • Engine Change

  • Engine Symbol Change

  • Session Status Change