Example #1
0
        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);
        }
Example #2
0
 /// <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);
 }
Example #3
0
 /// <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);
 }
Example #4
0
 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);
 }
Example #5
0
 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);
 }
Example #6
0
 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);
 }
Example #7
0
        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);
        }
Example #8
0
 public CDebugValue(IDebugObject pObject, IDebugContext pContext){
   this.m_Object = pObject;
   this.m_Context = pContext;
   this.m_RuntimeType = null;
 }
Example #9
0
    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;
    }
Example #10
0
 public CDebugValue(IDebugObject pObject, IDebugContext pContext)
 {
     this.m_Object      = pObject;
     this.m_Context     = pContext;
     this.m_RuntimeType = null;
 }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
    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;
    }
Example #14
0
 internal void Add(IDebugObject debugNPC)
 {
     objects.Add(debugNPC);
 }