IDebugBreakpointResolution2::GetResolutionInfo
Applies to: Visual Studio Visual Studio for Mac
Note
This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Gets the breakpoint resolution information that describes this breakpoint.
Syntax
HRESULT GetResolutionInfo(
BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO* pBPResolutionInfo
);
int GetResolutionInfo(
enum BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO[] pBPResolutionInfo
);
Parameters
dwFields
[in] A combination of flags from the BPRESI_FIELDS enumeration that determine which fields of the pBPResolutionInfo
parameter are to be filled out.
pBPResolutionInfo
[out] The BP_RESOLUTION_INFO structure to be filled in with information about this breakpoint.
Return Value
If successful, returns S_OK
; otherwise returns an error code.
Example
The following example implements this method for a simple CDebugBreakpointResolution
object that exposes the IDebugBreakpointResolution2 interface.
HRESULT CDebugBreakpointResolution::GetResolutionInfo(
BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO* pBPResolutionInfo)
{
HRESULT hr;
if (pBPResolutionInfo)
{
// Copy the specified fields of the request information from the class
// member variable to the local BP_RESOLUTION_INFO variable.
hr = CopyBP_RESOLUTION_INFO(m_bpResolutionInfo,
*pBPResolutionInfo,
dwFields);
}
else
{
hr = E_INVALIDARG;
}
return hr;
}
HRESULT CDebugBreakpointResolution::CopyBP_RESOLUTION_INFO(
BP_RESOLUTION_INFO& bpResSrc,
BP_RESOLUTION_INFO& bpResDest,
DWORD dwFields)
{
HRESULT hr = S_OK;
// Start with a raw copy.
memcpy(&bpResDest, &bpResSrc, sizeof(BP_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 BPRESI_BPRESLOCATION
// flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_BPRESLOCATION))
{
// Switch based 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 BPRESI_BPRESLOCATION flag in the BPRESI_FIELDS
// of the destination BP_RESOLUTION_INFO.
ClearFlag(bpResDest.dwFields, BPRESI_BPRESLOCATION);
break;
}
}
}
// AddRef the IDebugProgram2 if the BPRESI_PROGRAM flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_PROGRAM))
{
bpResDest.pProgram->AddRef();
}
// AddRef the IDebugThread2 if the BPRESI_THREAD flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_THREAD))
{
bpResDest.pThread->AddRef();
}
return hr;
}