示例#1
0
 internal void RegisterPgm(GXDebugInfo parentDbgInfo)
 {
     GXDebugManager.Instance.PushPgm(this, parentDbgInfo != null ? parentDbgInfo.SId : GXDebugManager.PGM_INFO_NO_PARENT, Key);
     if (parentDbgInfo != null)
     {
         parentDbgInfo.UpdateTicks();
         parentDbgInfo.LastItem = null;
         parentDbgInfo.stopwatch.Restart();
     }
 }
示例#2
0
 internal GXDebugItem PushRange(GXDebugInfo dbgInfo, int lineNro, int colNro, int lineNro2, int colNro2)
 {
     if ((colNro != 0 || colNro2 != 0))
     {
         return(mPush(dbgInfo, GXDebugMsgType.PGM_TRACE_RANGE_WITH_COLS, lineNro, lineNro2, new KeyValuePair <int, int>(colNro, colNro2)));
     }
     else
     {
         return(mPush(dbgInfo, GXDebugMsgType.PGM_TRACE_RANGE, lineNro, lineNro2, null));
     }
 }
示例#3
0
 internal void OnCleanup(GXDebugInfo dbgInfo)
 {
     PushSystem((int)GXDebugMsgCode.OBJ_CLEANUP, dbgInfo.SId);
     lock (sessionLock)
     {
         if (dbgInfo.Parent != null)
         {
             parentTable[dbgInfo.context.ClientID] = dbgInfo.Parent;
         }
         else
         {
             parentTable.TryRemove(dbgInfo.context.ClientID, out GXDebugInfo oldParent);
             if (!GxContext.Current.IsStandalone)
             {
                 Save();
             }
         }
     }
 }
示例#4
0
 internal GXDebugInfo GetDbgInfo(IGxContext context, int objClass, int objId, int dbgLines, long hash)
 {
     lock (sessionLock)
     {
         GXDebugInfo dbgInfo = new GXDebugInfo(NewSId(), context, new KeyValuePair <int, int>(objClass, objId));
         if (!pgmInfoTable.Contains(dbgInfo.Key))
         {
             KeyValuePair <int, long> pgmInfoObj = new KeyValuePair <int, long>(dbgLines, hash);
             pgmInfoTable.Add(dbgInfo.Key);
             PushSystem(GXDebugMsgCode.PGM_INFO.ToByte(), new KeyValuePair <object, object>(dbgInfo.Key, pgmInfoObj));
         }
         if (parentTable.TryGetValue(context.ClientID, out GXDebugInfo parentDbgInfo))
         {
             dbgInfo.Parent = parentDbgInfo;
         }
         dbgInfo.RegisterPgm(parentDbgInfo);
         parentTable[context.ClientID] = dbgInfo;
         return(dbgInfo);
     }
 }
示例#5
0
 internal void OnExit(GXDebugInfo dbgInfo)
 {
     PushSystem((int)GXDebugMsgCode.EXIT);
     Save();
 }
示例#6
0
        private GXDebugItem mPush(GXDebugInfo dbgInfo, GXDebugMsgType msgType, int arg1, int arg2, object argObj = null)
        {
            lock (saveLock)
            {
                if (ToSave != null)
                {
                    Save(ToSave);
                    ToSave = null;
                }
                GXDebugItem currentItem = Current[dbgIndex];
                currentItem.DbgInfo = dbgInfo;
                currentItem.MsgType = msgType;
                currentItem.Arg1    = arg1;
                currentItem.Arg2    = arg2;
                currentItem.ArgObj  = argObj;
                switch (msgType)
                {
                case GXDebugMsgType.SYSTEM:
                {
                    switch ((GXDebugMsgCode)arg1)
                    {
                    case GXDebugMsgCode.INITIALIZE:
                    case GXDebugMsgCode.EXIT:
                    case GXDebugMsgCode.OBJ_CLEANUP:
                    case GXDebugMsgCode.PGM_INFO:
                        currentItem.Ticks = TICKS_NOT_NEEDED;
                        break;

                    default: currentItem.Ticks = TICKS_NOT_SET; break;
                    }
                }
                break;

                case GXDebugMsgType.REGISTER_PGM:
                {
                    currentItem.Ticks = TICKS_NOT_NEEDED;
                }
                break;

                default:
                    currentItem.Ticks = TICKS_NOT_SET;
                    break;
                }
                dbgIndex++;
                if (dbgIndex == Current.Length)
                {
                    bool mSaving = false;
                    lock (mSaveLock)
                    {
                        mSaving = saving;
                    }
                    if (mSaving)
                    {
                        waitSaveEvent.WaitOne();
                    }
                    ToSave = Current;
                    GXDebugItem[] swap = Current;
                    Current = Next;
                    Next    = swap;
                    pgmInfoTable.Clear();
                    dbgIndex = 0;
                }
                return(currentItem);
            }
        }
示例#7
0
 internal GXDebugItem PushPgm(GXDebugInfo dbgInfo, int ParentSId, KeyValuePair <int, int> PgmKey) => mPush(dbgInfo, GXDebugMsgType.REGISTER_PGM, ParentSId, 0, PgmKey);
示例#8
0
 internal GXDebugItem Push(GXDebugInfo dbgInfo, int lineNro, int colNro = 0) => mPush(dbgInfo, GXDebugMsgType.PGM_TRACE, lineNro, colNro, null);