Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mendapatkan informasi resolusi kesalahan titik henti.
Sintaks
int GetResolutionInfo(
enum_BPERESI_FIELDS dwFields,
BP_ERROR_RESOLUTION_INFO[] pErrorResolutionInfo
);
Parameter
dwFields
[di] Kombinasi bendera dari enumerasi BPERESI_FIELDS yang menentukan bidang pErrorResolutionInfo mana yang akan diisi.
pErrorResolutionInfo
[masuk, keluar] Struktur BP_ERROR_RESOLUTION_INFO yang diisi dengan deskripsi resolusi titik henti.
Tampilkan Nilai
Jika berhasil, mengembalikan S_OK; jika tidak, mengembalikan kode galat.
Contoh
Contoh berikut mengimplementasikan metode ini untuk objek sederhana CDebugErrorBreakpointResolution yang mengekspos antarmuka 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;
}