Share via


IDebugErrorBreakpointResolution2::GetResolutionInfo

Gets the breakpoint error resolution information.

HRESULT GetResolutionInfo( 
   BPERESI_FIELDS            dwFields,
   BP_ERROR_RESOLUTION_INFO* pErrorResolutionInfo
);
int GetResolutionInfo( 
   enum_BPERESI_FIELDS        dwFields,
   BP_ERROR_RESOLUTION_INFO[] pErrorResolutionInfo
);

Parameters

  • dwFields
    [in] A combination of flags from the BPERESI_FIELDS enumeration that determine which fields of pErrorResolutionInfo are to be filled out.

  • pErrorResolutionInfo
    [in, out] The BP_ERROR_RESOLUTION_INFO structure that is filled in with the description of the breakpoint resolution.

Return Value

If successful, returns S_OK; otherwise, returns an error code.

Example

The following example implements this method for a simple CDebugErrorBreakpointResolution object that exposes the IDebugErrorBreakpointResolution2 interface.

HRESULT CDebugErrorBreakpointResolution::GetResolutionInfo(
   BPERESI_FIELDS dwFields,
   BP_ERROR_RESOLUTION_INFO* pBPErrorResolutionInfo)  
{  
   HRESULT hr;  
  
   if (pBPErrorResolutionInfo)  
   {  
      // Copy the specified fields of the request information from the class member
      // variable to the local BP_ERROR_RESOLUTION_INFO variable.  
      hr = CopyBP_ERROR_RESOLUTION_INFO(m_bpErrorResolutionInfo,
                                        *pBPErrorResolutionInfo,
                                        dwFields);  
   }  
   else  
   {  
      hr = E_INVALIDARG;  
   }  
  
   return hr;  
}  
  
  
HRESULT CDebugErrorBreakpointResolution::CopyBP_ERROR_RESOLUTION_INFO(
   BP_ERROR_RESOLUTION_INFO& bpResSrc,
   BP_ERROR_RESOLUTION_INFO& bpResDest,
   DWORD dwFields)
{  
   HRESULT hr = S_OK;  
  
   // Start with a raw copy.  
   memcpy(&bpResDest, &bpResSrc, sizeof(BP_ERROR_RESOLUTION_INFO));  
  
   // The fields in the destination is the result of the AND of bpInfoSrc.dwFields
   // and dwFields.  
   bpResDest.dwFields = dwFields & bpResSrc.dwFields;  
  
   // Fill in the bp location information if the BPERESI_BPRESLOCATION flag
   // is set in BPERESI_FIELDS.  
   if (IsFlagSet(bpResDest.dwFields, BPERESI_BPRESLOCATION))  
   {  
      // Switch on the BP_TYPE.    
      switch (bpResSrc.bpResLocation.bpType)  
      {  
         case BPT_CODE:  
         {  
            // AddRef the IDebugCodeContext2 of the BP_RESOLUTION_CODE structure.  
            bpResDest.bpResLocation.bpResLocation.bpresCode.pCodeContext->AddRef();  
            break;  
         }  
         case BPT_DATA:  
         {  
            // Copy the bstrDataExpr, bstrFunc, and bstrImage of the
            // BP_RESOLUTION_DATA structure.  
            bpResDest.bpResLocation.bpResLocation.bpresData.bstrDataExpr =
               SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrDataExpr);
            bpResDest.bpResLocation.bpResLocation.bpresData.bstrFunc =
               SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrFunc);
            bpResSrc.bpResLocation.bpResLocation.bpresData.bstrImage =
               SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrImage);
            break;
         }
         default:
         {
            assert(FALSE);
            // Clear the BPERESI_BPRESLOCATION flag of the BPERESI_FIELDS
            // in the destination BP_ERROR_RESOLUTION_INFO.
            ClearFlag(bpResDest.dwFields, BPERESI_BPRESLOCATION);
            break;
         }  
      }  
   }  
   // AddRef the IDebugProgram2 if the BPRESI_PROGRAM flag is set in the BPRESI_FIELDS.  
   if (IsFlagSet(bpResDest.dwFields, BPERESI_PROGRAM))  
   {  
      bpResDest.pProgram->AddRef();  
   }  
   // AddRef the IDebuThread2 if the BPRESI_THREAD flag is set in the BPRESI_FIELDS.  
   if (IsFlagSet(bpResDest.dwFields, BPERESI_THREAD))  
   {  
      bpResDest.pThread->AddRef();  
   }  
   // Check if the BPERESI_MESSAGE flag is set in the BPRESI_FIELDS.  
   if (IsFlagSet(bpResDest.dwFields, BPERESI_MESSAGE))  
   {  
      // Copy the source bstrMessage into the destination bstrMessage.  
      bpResDest.bstrMessage = SysAllocString(bpResSrc.bstrMessage);  
      // Clear the destination flag if there is no message.  
      if (!bpResDest.bstrMessage)  
      {  
         ClearFlag(bpResDest.dwFields, BPERESI_MESSAGE);  
      }  
   }  
  
   return hr;  
}  

See Also

Reference

IDebugErrorBreakpointResolution2

BPERESI_FIELDS

BP_ERROR_RESOLUTION_INFO