ICorDebugVariableHome 接口
表示函数的局部变量或参数。
方法
方法 | 说明 |
---|---|
GetArgumentIndex 方法 | 获取函数参数的索引。 |
GetCode 方法 | 获取包含此 ICorDebugVariableHome 对象的“ICorDebugCode”实例。 |
GetLiveRange 方法 | 获取此变量所在的本机范围。 |
GetLocationType 方法 | 获取变量的本机位置的类型。 |
GetOffset 方法 | 获取从变量基寄存器处获得的偏移量。 |
GetRegister 方法 | 获取包含位置类型为的 VLT_REGISTER 的变量的寄存器,以及位置类型为 VLT_REGISTER_RELATIVE 的变量的基寄存器。 |
GetSlotIndex 方法 | 获取本地变量的托管槽索引。 |
示例
下面的代码片段使用名为 pCode4
的 ICorDebugCode4 对象。
ICorDebugCode4 *pCode4 = NULL;
pCode->QueryInterface(IID_ICorDebugCode4, &pCode4);
ICorDebugVariableEnum *pVarLocEnum = NULL;
pCode4->EnumerateVariableHomes(&pVarLocEnum);
// retrieve local variables and arguments
ULONG celt = 0;
pVarLocEnum->GetCount(&celt);
ICorDebugVariableHome **homes = new ICorDebugVariableHome *[celt];
ULONG celtFetched = 0;
pVarLocEnum->Next(celt, homes, &celtFetched);
for (int i = 0; i < celtFetched; i++)
{
VariableLocationType locType = VLT_INVALID;
homes[i].GetLocationType(&locType);
switch (locType)
{
case VLT_REGISTER:
CorDebugRegister register = 0;
locals[i].GetRegister(®ister);
// now we know which register it is in
break;
case VLT_REGISTER_RELATIVE:
CorDebugRegister baseRegister = 0;
LONG offset = 0;
locals[i].GetRegister(®ister);
locals[i].GetOffset(&offset);
// now we know the register-relative offset
break;
case VLT_INVALID:
// handle case where we can't access the location
break;
}
}
要求
平台:请参阅系统要求。
标头:CorDebug.idl、CorDebug.h
库:CorGuids.lib
.NET Framework 版本:自 4.6.2 起可用