private static VARIABLE GetArrayItems(ICorDebugValue value) { VARIABLE vari = new VARIABLE(); vari.isArray = true; vari.isComplex = false; var arrayReference = value as ICorDebugReferenceValue; ICorDebugValue arrayDereferenced; try{ arrayReference.Dereference(out arrayDereferenced); ICorDebugArrayValue array = arrayDereferenced as ICorDebugArrayValue; IList<PARAMETER> members = new List<PARAMETER>(); if (array != null) { uint noOfItems = 0; array.GetCount(out noOfItems); if (noOfItems == 0) vari.innerValue = "<<Zero Elements in this array>>"; else{ for (int index = 0; index < noOfItems; index++) { ICorDebugValue elementVal = null; array.GetElementAtPosition((uint)index, out elementVal); MDbgValue mdgbVal = new MDbgValue(new CorValue(value)); DEBUGPARAM parm = GetParamInfo(elementVal); parm.name = "Item[" + index.ToString() + "]"; members.Add(parm); } vari.parameters = members; } } } catch (Exception) { vari.innerValue = "<<Not able to get the value>>"; } return vari; }
private static VARIABLE GetStringValue(ICorDebugValue value) { VARIABLE vari = new VARIABLE(); ICorDebugReferenceValue refVal2 = value as ICorDebugReferenceValue; ICorDebugValue pDeRef2 = null; try{ refVal2.Dereference(out pDeRef2); ICorDebugStringValue _msgString = pDeRef2 as ICorDebugStringValue; uint stringSize; uint length; _msgString.GetLength(out length); StringBuilder sb = new StringBuilder((int)length + 1); // we need one extra char for null _msgString.GetString((uint)sb.Capacity, out stringSize, sb); vari.innerValue = sb.ToString(); } catch (COMException e) { if ((uint)e.ErrorCode == 0x80131305) { vari.innerValue = "<<Value Might be Null>>"; } else { vari.innerValue = "<<Error While getting value >> " + e.Message; } } vari.isArray = false; vari.isComplex = false; return vari; }
public static VARIABLE GetValue(ICorDebugValue value,CorElementType type) { if (type == CorElementType.ELEMENT_TYPE_VOID) { value.GetType(out type); } VARIABLE vari = new VARIABLE(); ICorDebugGenericValue generic = value as ICorDebugGenericValue; if (generic != null) { vari.innerValue = GetGenericValue(generic,type); vari.isComplex = false; } else { switch (type) { case CorElementType.ELEMENT_TYPE_CLASS: case CorElementType.ELEMENT_TYPE_VALUETYPE: vari.isComplex = true; vari.isArray = false; vari.parameters = GetObjectMembers(value); break; case CorElementType.ELEMENT_TYPE_STRING: vari= GetStringValue(value); break; case CorElementType.ELEMENT_TYPE_SZARRAY: case CorElementType.ELEMENT_TYPE_ARRAY: vari = GetArrayItems(value); break; default: break; } } return vari; }