public bool MoveNext() { bool pRetVal = false; if (null != this.m_Current) { this.m_Current = null; } else { // Skip the first element this.m_Objects.Skip(1); } IDebugObject pObject = null; IDebugObject[] pObjects = new IDebugObject[1]; int fetched = 0; this.m_Objects.Next(1, pObjects, out fetched); if (null != pObjects && fetched > 0) { pObject = pObjects[0]; IDebugValue val = new CDebugValue(pObject, this.m_Context); this.m_Current = val; pRetVal = true; } return(pRetVal); }
/// <summary> /// Removes a debug object from the system. /// </summary> /// <param name="obj"></param> public static void RemoveDebugObject(IDebugObject obj) { if (!Enabled) { return; } debugObjectsRemove.Add(obj); }
/// <summary> /// Adds a debug object to the system. /// </summary> /// <param name="obj"></param> public static void AddDebugObject(IDebugObject obj) { if (!Enabled) { return; } debugObjectsAdd.Add(obj); }
public static void AddDebugObjectWorldSingleCall(IDebugObject debugObject) { if (drawablesWorldSingleCall == null) { drawablesWorldSingleCall = new Dictionary <Type, DebugCollection>(); } if (!drawablesWorldSingleCall.ContainsKey(debugObject.GetType())) { drawablesWorldSingleCall.Add(debugObject.GetType(), new DebugCollection()); } drawablesWorldSingleCall[debugObject.GetType()].Add(debugObject); }
public static void AddDebugObjectScreen(IDebugObject debugObject) { if (drawablesScreen == null) { drawablesScreen = new Dictionary <Type, DebugCollection>(); } if (!drawablesScreen.ContainsKey(debugObject.GetType())) { drawablesScreen.Add(debugObject.GetType(), new DebugCollection()); } drawablesScreen[debugObject.GetType()].Add(debugObject); }
public static void AddDebugObjectWorld(IDebugObject debugNPC) { if (drawablesWorld == null) { drawablesWorld = new Dictionary <Type, DebugCollection>(); } if (!drawablesWorld.ContainsKey(debugNPC.GetType())) { drawablesWorld.Add(debugNPC.GetType(), new DebugCollection()); } drawablesWorld[debugNPC.GetType()].Add(debugNPC); }
public IDebugValue GetElement(int index) { IDebugValue pRetVal = null; IDebugObject element = null; this.m_ArrayObject.GetElement((uint)index, out element); if (null != element) { pRetVal = new CDebugValue(element, this.m_Context); } return(pRetVal); }
public CDebugValue(IDebugObject pObject, IDebugContext pContext){ this.m_Object = pObject; this.m_Context = pContext; this.m_RuntimeType = null; }
public bool MoveNext() { bool pRetVal = false; if (null != this.m_Current){ this.m_Current = null; } else { // Skip the first element this.m_Objects.Skip(1); } IDebugObject pObject = null; IDebugObject[] pObjects = new IDebugObject[1]; int fetched = 0; this.m_Objects.Next(1, pObjects, out fetched); if (null != pObjects && fetched > 0) { pObject = pObjects[0]; IDebugValue val = new CDebugValue(pObject, this.m_Context); this.m_Current = val; pRetVal = true; } return pRetVal; }
public CDebugValue(IDebugObject pObject, IDebugContext pContext) { this.m_Object = pObject; this.m_Context = pContext; this.m_RuntimeType = null; }
public void SetValue(object val) { byte[] valueBytes = null; IDebugBinder binder = this.m_Context.Binder; if (null == this.m_RuntimeType) { binder.ResolveRuntimeType(this.m_Object, out this.m_RuntimeType); } if (null != this.m_RuntimeType) { IDebugObject pObject = this.m_Object; IDebugField type = this.m_RuntimeType; if (null != pObject) { uint size = 0; pObject.GetSize(out size); if (0 < size) { valueBytes = new byte[size]; if (null != valueBytes) { FIELD_KIND fieldKind = 0; type.GetKind(out fieldKind); if (0 != fieldKind) { if (0 != (fieldKind & FIELD_KIND.FIELD_TYPE_PRIMITIVE)) { FIELD_INFO fieldInfo; type.GetInfo(FIELD_INFO_FIELDS.FIF_NAME, out fieldInfo); if (null != fieldInfo.bstrName) { switch (size) { case 1: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { valueBytes[0] = (byte )val; } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { valueBytes[0] = (byte )val; } break; case 2: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { Int16 temp = (Int16)val; valueBytes[0] = System.Convert.ToByte(temp & 0x00FF); valueBytes[1] = System.Convert.ToByte(temp >> 8); } else if (0 == String.Compare("char", fieldInfo.bstrName, true)) { UInt16 temp = (UInt16)val; valueBytes[0] = System.Convert.ToByte(temp & 0x00FF); valueBytes[1] = System.Convert.ToByte(temp >> 8); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { UInt16 temp = (UInt16)val; valueBytes[0] = System.Convert.ToByte(temp & 0x00FF); valueBytes[1] = System.Convert.ToByte(temp >> 8); } break; case 4: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { Int32 temp = (Int32)val; valueBytes[0] = System.Convert.ToByte(temp & 0xFF); valueBytes[1] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[2] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[3] = System.Convert.ToByte(temp >> 8); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { UInt32 temp = (UInt32)val; valueBytes[0] = System.Convert.ToByte(temp & 0xFF); valueBytes[1] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[2] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[3] = System.Convert.ToByte(temp >> 8); } else if (0 == String.Compare("real", fieldInfo.bstrName, true)) { UInt32 temp = (UInt32)val; valueBytes[0] = System.Convert.ToByte(temp & 0xFF); valueBytes[1] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[2] = System.Convert.ToByte((temp >> 8) & 0xFF); valueBytes[3] = System.Convert.ToByte(temp >> 8); } break; case 8: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_I8; //pRetVal->llVal = *reinterpret_cast<LONGLONG*>(valueBytes); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_UI8; //pRetVal->ullVal = *reinterpret_cast<ULONGLONG*>(valueBytes); } else if (0 == String.Compare("real", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_R8; //pRetVal->dblVal = *reinterpret_cast<DOUBLE*>(valueBytes); } break; } if (0 == String.Compare("bool", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_BOOL; bool temp = (bool)val; for (uint i = 0; i < size; i++) { if (temp) { valueBytes[i] = 1; } else { valueBytes[i] = 0; } } } else if (0 == String.Compare("string", fieldInfo.bstrName, true)) { //VSASSERT(size >= 2, "String length is too short"); //VSASSERT(size % 2 == 0, "String of odd byte length"); //UINT chars = (size-2)/2; // Debug engine adds 2 for terminating L'\0' //pRetVal->vt = VT_BSTR; //pRetVal->bstrVal = SysAllocStringLen(NULL, chars); //wcsncpy(pRetVal->bstrVal, reinterpret_cast<WCHAR*>(valueBytes), chars); //pRetVal->bstrVal[chars] = L'\0'; String temp = val as String; char[] charArray = temp.ToCharArray(); valueBytes = new byte[2 * charArray.Length + 2]; int i = 0; for ( ; i < charArray.Length; i++) { UInt16 temp1 = (UInt16)charArray[i]; valueBytes[2 * i] = System.Convert.ToByte(temp1 & 0x00FF); valueBytes[2 * i + 1] = System.Convert.ToByte(temp1 >> 8); } valueBytes[2 * i] = valueBytes[2 * i + 1] = 0; } } } } } } } } this.m_Object.SetValue(valueBytes, (uint)valueBytes.Length); }
public Object GetValue() { Object pRetVal = null; IDebugBinder binder = this.m_Context.Binder; if (null == this.m_RuntimeType) { binder.ResolveRuntimeType(this.m_Object, out this.m_RuntimeType); } if (null != this.m_RuntimeType) { IDebugObject pObject = this.m_Object; IDebugField type = this.m_RuntimeType; IDebugEnumField enumField = null; enumField = this.m_RuntimeType as IDebugEnumField; if (null != enumField) { IDebugField underlyingField = null; enumField.GetUnderlyingSymbol(out underlyingField); if (null != underlyingField) { IDebugObject underlyingObject = null; binder.Bind(this.m_Object, underlyingField, out underlyingObject); if (null != underlyingObject) { pObject = underlyingObject; } IDebugField underlyingType = null; underlyingField.GetType(out underlyingType); if (null != underlyingType) { type = underlyingType; } } } if (null != pObject) { uint size = 0; pObject.GetSize(out size); if (0 < size) { byte[] valueBytes = new byte[size]; if (null != valueBytes) { pObject.GetValue(valueBytes, size); if (null != valueBytes) { FIELD_KIND fieldKind = 0; type.GetKind(out fieldKind); if (0 != fieldKind) { if (0 != (fieldKind & FIELD_KIND.FIELD_TYPE_PRIMITIVE)) { FIELD_INFO fieldInfo; type.GetInfo(FIELD_INFO_FIELDS.FIF_NAME, out fieldInfo); if (null != fieldInfo.bstrName) { switch (size) { case 1: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { pRetVal = valueBytes[0]; } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { pRetVal = valueBytes[0]; } break; case 2: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { UInt16 temp = 0; for (int i = 0; i < 2; i++) { temp <<= 8; temp |= valueBytes[1 - i]; } pRetVal = (Int16 )temp; //pRetVal->vt = VT_I2; //pRetVal->iVal = *reinterpret_cast<SHORT*>(valueBytes); } else if (0 == String.Compare("char", fieldInfo.bstrName, true)) { UInt16 temp = 0; for (int i = 0; i < 2; i++) { temp <<= 8; temp |= valueBytes[1 - i]; } pRetVal = temp; //pRetVal->vt = VT_UI2; //pRetVal->uiVal = *reinterpret_cast<USHORT*>(valueBytes); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { UInt16 temp = 0; for (int i = 0; i < 2; i++) { temp <<= 8; temp |= valueBytes[1 - i]; } pRetVal = temp; //pRetVal->vt = VT_UI2; //pRetVal->uiVal = *reinterpret_cast<USHORT*>(valueBytes); } break; case 4: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { Int32 temp = 0; for (int i = 0; i < 4; i++) { temp <<= 8; temp |= valueBytes[3 - i]; } pRetVal = temp; //pRetVal->vt = VT_I4; //pRetVal->lVal = *reinterpret_cast<LONG*>(valueBytes); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { UInt32 temp = 0; for (int i = 0; i < 4; i++) { temp <<= 8; temp |= valueBytes[3 - i]; } pRetVal = temp; //pRetVal->vt = VT_UI4; //pRetVal->ulVal = *reinterpret_cast<ULONG*>(valueBytes); } else if (0 == String.Compare("real", fieldInfo.bstrName, true)) { Int32 temp = 0; for (int i = 0; i < 4; i++) { temp <<= 8; temp |= valueBytes[3 - i]; } pRetVal = temp; //pRetVal->vt = VT_R4; //pRetVal->fltVal = *reinterpret_cast<FLOAT*>(valueBytes); } break; case 8: if (0 == String.Compare("whole", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_I8; //pRetVal->llVal = *reinterpret_cast<LONGLONG*>(valueBytes); } else if (0 == String.Compare("uwhole", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_UI8; //pRetVal->ullVal = *reinterpret_cast<ULONGLONG*>(valueBytes); } else if (0 == String.Compare("real", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_R8; //pRetVal->dblVal = *reinterpret_cast<DOUBLE*>(valueBytes); } break; } if (0 == String.Compare("bool", fieldInfo.bstrName, true)) { //pRetVal->vt = VT_BOOL; pRetVal = false; for (uint i = 0; i < size; i++) { if (valueBytes[i] != 0) { pRetVal = true; } } } else if (0 == String.Compare("string", fieldInfo.bstrName, true)) { //VSASSERT(size >= 2, "String length is too short"); //VSASSERT(size % 2 == 0, "String of odd byte length"); //UINT chars = (size-2)/2; // Debug engine adds 2 for terminating L'\0' //pRetVal->vt = VT_BSTR; //pRetVal->bstrVal = SysAllocStringLen(NULL, chars); //wcsncpy(pRetVal->bstrVal, reinterpret_cast<WCHAR*>(valueBytes), chars); //pRetVal->bstrVal[chars] = L'\0'; pRetVal = (new System.Text.UnicodeEncoding()).GetString(valueBytes); } } } } } } } } } return(pRetVal); }
public IDebugValue Evaluate(IDebugValue containerValue, IDebugValue[] arguments) { IDebugValue pRetVal = null; uint argcount = 0; if( null != arguments ) { argcount = (uint ) arguments.Length; } IDebugObject[] args = new IDebugObject[argcount]; if (null != args){ if (argcount > 0){ for (uint i = 0; i < argcount; i++){ IDebugValue value = arguments[i] as IDebugValue; if (null != value){ args[i] = ((CDebugValue ) value).GetObject(); } else { return null; } } } IDebugObject containerObject = null; if (null != containerValue){ containerObject = ((CDebugValue ) containerValue).GetObject(); } IDebugBinder binder = this.m_Context.Binder; IDebugObject pObject = null; binder.Bind(containerObject, this.m_Field, out pObject); IDebugFunctionObject pFuncObject = null; pFuncObject = pObject as IDebugFunctionObject; if (null != pFuncObject) { IDebugObject result = null; pFuncObject.Evaluate(args, argcount, /*this.m_Context.timeout*/ 99999, out result); if (null != result) { pRetVal = new CDebugValue(result, this.m_Context); } } } return pRetVal; }
internal void Add(IDebugObject debugNPC) { objects.Add(debugNPC); }