Implementing CPendingBreakpoint
The session debug manager (SDM) calls the IDebugEngine2::CreatePendingBreakpoint method and passes it an IDebugBreakpointRequest2 interface.
When the breakpoint is bound to application code, the IDebugPendingBreakpoint2::Bind method, implemented by the CPendingBreakpoint class, sends a breakpoint bound event to the SDM. In order to send an event, the CPendingBreakpoint class needs access to both the event callback function and the debug engine. The CPendingBreakpoint::Initialize method saves pointers to both of these in member variables.
To implement the CPendingBreakpoint class
In Class View, right-click the CPendingBreakpoint class, click Add Variable, and add a variable with the Variable name m_spCallback, a Variable type of CComPtr<IDebugEventCallback2>, and an Access type of protected.
Add another variable to the CPendingBreakpoint class with the Variable name m_spEngine, a Variable type of CComPtr<IDebugEngine2>, and an Access type of protected.
Add a third variable to the CPendingBreakpoint class with the Variable name m_spBPRequest, a Variable type of CComPtr<IDebugBreakpointRequest2>, and an Access type of protected.
In Class View, right-click the CPendingBreakpoint class and click Add Function to add a function with the Function name Initialize, a Return type of void, an Access type of public, and the following parameters in the order given (click Add between each one):
Parameter type
Parameter name
IDebugBreakpointRequest2 *
pBPRequest
IDebugEventCallback2 *
pCallback
IDebugEngine2 *
pEngine
Open the Breakpoint.cpp file, find CPendingBreakpoint::Initialize, and add the following bold lines:
void CPendingBreakpoint::Initialize(IDebugBreakpointRequest2 * pBPRequest, IDebugEventCallback2 * pCallback, IDebugEngine2 * pEngine) { m_spCallback = pCallback; m_spEngine = pEngine; m_spBPRequest = pBPRequest; }
Also in the Breakpoint.cpp file, find CPendingBreakpoint::GetBreakpointRequest and replace the line //TODO: RETURN BREAKPOINT REQUEST as well as the following return statement with the following:
*ppBPRequest = m_spBPRequest; (*ppBPRequest)->AddRef(); return S_OK;
Build the project to make sure there are no errors.