Condividi tramite


IDebugPendingBreakpoint2::EnumErrorBreakpoints

Gets a list of all error breakpoints that resulted from this pending breakpoint.

HRESULT EnumErrorBreakpoints( 
   BP_ERROR_TYPE                 bpErrorType,
   IEnumDebugErrorBreakpoints2** ppEnum
);
int EnumErrorBreakpoints( 
   enum_BP_ERROR_TYPE              bpErrorType,
   out IEnumDebugErrorBreakpoints2 ppEnum
);

Parameters

Return Value

If successful, returns S_OK; otherwise, returns an error code. Returns E_BP_DELETED if the breakpoint has been deleted.

Example

The following example shows how to implement this method for a simple CPendingBreakpoint object that exposes the IDebugPendingBreakpoint2 interface.

HRESULT CPendingBreakpoint::EnumErrorBreakpoints(
   BP_ERROR_TYPE bpErrorType,
   IEnumDebugErrorBreakpoints2** ppEnum)  
{  
   HRESULT hr;  
  
   // Verify that the passed IEnumDebugErrorBreakpoints2 interface pointer 
   // is valid.  
   if (ppEnum)  
   {  
      // Verify that the pending breakpoint has not been deleted. If 
      // deleted, then return hr = E_BP_DELETED.  
      if (m_state.state != PBPS_DELETED)  
      {  
         // Verify that this error is not a warning.  
         // All errors supported by this DE are errors, not warnings.  
         if (IsFlagSet(bpErrorType, BPET_TYPE_ERROR) && m_pErrorBP)  
         {  
            // Get the error breakpoint.  
            CComPtr<IDebugErrorBreakpoint2> spErrorBP;  
            hr = m_pErrorBP->QueryInterface(&spErrorBP);  
            assert(hr == S_OK);  
            if (hr == S_OK)  
            {  
               // Create the error breakpoint enumerator.  
               CComObject<CEnumDebugErrorBreakpoints>* pErrorEnum;  
               hr = CComObject<CEnumDebugErrorBreakpoints>::CreateInstance(&pErrorEnum);  
               assert(hr == S_OK);  
               if (hr == S_OK)  
               {  
                  // Initialize the enumerator of error breakpoints with 
                  // the IDebugErrorBreakpoint2 information.    
                  IDebugErrorBreakpoint2* rgpErrorBP[] = { spErrorBP.p };  
                  hr = pErrorEnum->Init(rgpErrorBP, &(rgpErrorBP[1]), NULL, AtlFlagCopy);  
                  if (hr == S_OK)  
                  {  
                     // Verify that the passed IEnumDebugErrorBreakpoints2   
                     // interface can be queried by the created 
                     // CEnumDebugErrorBreakpoints object.  
                     hr = pErrorEnum->QueryInterface(ppEnum);  
                     assert(hr == S_OK);  
                  }  
  
                  // Otherwise, delete the CEnumDebugErrorBreakpoints 
                  // object.  
                  if (FAILED(hr))  
                  {  
                     delete pErrorEnum;  
                  }  
               }  
            }  
         }  
         else  
         {  
            hr = S_FALSE;  
         }  
      }  
      else  
      {  
         hr = E_BP_DELETED;  
      }  
   }  
   else  
   {  
      hr = E_INVALIDARG;  
   }  
  
   return hr;  
}  

See Also

Reference

IDebugPendingBreakpoint2

BP_ERROR_TYPE

IEnumDebugErrorBreakpoints2

IDebugErrorBreakpoint2