Hizkuntza
Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Obtiene la información de resolución de errores del punto de interrupción.
Sintaxis
int GetResolutionInfo(
enum_BPERESI_FIELDS dwFields,
BP_ERROR_RESOLUTION_INFO[] pErrorResolutionInfo
);
Parámetros
dwFields
[in] Combinación de marcas de la enumeración BPERESI_FIELDS que determinan qué campos se pErrorResolutionInfo van a rellenar.
pErrorResolutionInfo
[dentro, fuera] Estructura BP_ERROR_RESOLUTION_INFO que se rellena con la descripción de la resolución del punto de interrupción.
Valor devuelto
Si la operación se realiza correctamente, devuelve S_OK; de lo contrario, devuelve un código de error.
Ejemplo
En el ejemplo siguiente se implementa este método para un objeto simple CDebugErrorBreakpointResolution que expone la interfaz IDebugErrorBreakpointResolution2 .
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;
}