public IList<PARAMETER> GetParamInfo() { ICorDebugILFrame ilFrame = frame as ICorDebugILFrame; IList<PARAMETER> args = null; if (ilFrame != null){ ICorDebugValue value = null; ICorDebugValueEnum values = null; ilFrame.EnumerateArguments(out values); uint val = 0; values.GetCount(out val); if (val > 0) { args = new List<PARAMETER>(); } for (uint index = 0; index < val; index++){ try{ ilFrame.GetArgument(index, out value); MDbgValue mdgbVal = new MDbgValue(new CorValue(value)); DEBUGPARAM param = new DEBUGPARAM(); param.name = mdgbVal.Name; param.type = mdgbVal.TypeName; param.isComplex = mdgbVal.IsComplexType; param.isNull = mdgbVal.IsNull; param.corValue = mdgbVal; args.Add(param); } catch (COMException e){ if ((uint)e.ErrorCode == 0x80131304) { DEBUGPARAM degParam = new DEBUGPARAM(); degParam.corValue = null; degParam.inValid = true; //degParam.corType = CorElementType.; args.Add(degParam); //return null; } else { throw; } } } } return args; }
public void GetPropertyValue(DEBUGPARAM property) { ICorDebugEval eVal = null; corThread.CreateEval(out eVal); uint pramsCount = 0; ICorDebugValue[] value = new ICorDebugValue[2]; if (property.corValue != null) { //value[0] = property.corValue; pramsCount++; if (property.indexValue != null) { ICorDebugValue newVal = null; eVal.CreateValue(CorElementType.ELEMENT_TYPE_I4, null, out newVal); ICorDebugGenericValue dGenricVal = newVal as ICorDebugGenericValue; if (dGenricVal != null) { Byte bv = Convert.ToByte(property.indexValue); unsafe { dGenricVal.SetValue(new IntPtr(&bv)); } } value[1] = newVal; pramsCount++; } } //newVal. //value[0] = property.corValue; eVal.CallFunction(property.property.CorFun, pramsCount, value); //VARIABLE var = new VARIABLE(); //var. //ICorDebugValue val = null; //eVal.GetResult(out val); }