Exemplo n.º 1
0
        public void StartTrace()
        {
            var             curTime   = DateTime.Now;
            int             id        = Thread.CurrentThread.ManagedThreadId;
            StackFrame      frame     = new StackFrame(1);
            MethodBase      method    = frame.GetMethod();
            var             stackInfo = new StackMethodsInfo(curTime, method);
            StackThreadInfo stackThreadInfo;

            Stack <StackMethodsInfo> curStack;

            MethodInfo methodInfo = new MethodInfo(method.Name, method.DeclaringType.FullName, null);

            stackInfo.MethodInfo = methodInfo;


            if (cdIdStack.ContainsKey(id))
            {
                cdIdStack.TryGetValue(id, out stackThreadInfo);
                curStack = stackThreadInfo.Stack;
            }
            else
            {
                curStack = new Stack <StackMethodsInfo>();
                ThreadInfo threadInfo = new ThreadInfo(id);
                stackThreadInfo = new StackThreadInfo(threadInfo, curStack);
                cdIdStack.TryAdd(id, stackThreadInfo);
                threadInfos.Add(threadInfo);
            }
            AddToList(stackThreadInfo, methodInfo);

            curStack.Push(stackInfo);
        }
Exemplo n.º 2
0
        private void AddToList(StackThreadInfo threadInfos, MethodInfo methodInfo)
        {
            StackMethodsInfo         parentMethod;
            Stack <StackMethodsInfo> methodInfos = threadInfos.Stack;

            if (methodInfos.Count > 0)
            {
                parentMethod = methodInfos.Pop();
                MethodInfo method = parentMethod.MethodInfo;
                if (method.Methods == null)
                {
                    method.Methods = new List <MethodInfo>();
                }
                method.Methods.Add(methodInfo);
                methodInfos.Push(parentMethod);
            }
            else
            {
                ThreadInfo threadInfo = threadInfos.ThreadInfo;
                if (threadInfo.Methods == null)
                {
                    threadInfo.Methods = new List <MethodInfo>();
                }
                threadInfo.Methods.Add(methodInfo);
            }
        }