Example #1
0
        /// <summary>
        /// Add the Method type to the specified StackSegment
        /// </summary>
        /// <param name="frame">The Stack frame.</param>
        /// <param name="segment">The Stack segment.</param>
        private static void AddMethodType(StackFrame frame, StackSegment segment)
        {
            MethodBase Method = frame.GetMethod();

            if(Method.IsPublic) {
                segment.Type = MethodType.Public;
            }
            else if(Method.IsPrivate) {
                segment.Type = MethodType.Private;
            }
            else if(Method.IsStatic) {
                segment.Type = MethodType.Static;
            }
            else if(Method.IsVirtual) {
                segment.Type = MethodType.Virtual;
            }
            else if(Method.IsAbstract) {
                segment.Type = MethodType.Abstract;
            }
        }
Example #2
0
        /// <summary>
        /// Tries to add to the message all the stack information available at the given moment.
        /// </summary>
        /// <param name="message">The message to which to attach the stack information.</param>
        private static void AddStackInfoToMessage(DebugMessage message)
        {
            if(message == null) {
                return;
            }

            // check if we need to allocate the stack segments
            if(message.HasStack && message.StackSegments != null) {
                message.StackSegments.Clear();
            }
            else {
                message.StackSegments = new List<StackSegment>();
                message.HasStack = true;
            }

            // obtain stack information
            StackTrace stackInfo = new StackTrace(0, true);

            for(int i = 0; i < stackInfo.FrameCount; i++) {
                StackSegment segment = new StackSegment();
                StackFrame frame = stackInfo.GetFrame(i);

                if(frame.GetMethod().DeclaringType.Namespace == typeof(Debug).Namespace) {
                    continue;
                }

                // copy the relevant data
                segment.File = frame.GetFileName();
                segment.DeclaringObject = frame.GetMethod().DeclaringType.Name;
                segment.DeclaringNamespace = frame.GetMethod().DeclaringType.Namespace;
                segment.Method = frame.GetMethod().ToString();
                AddMethodType(frame, segment);

                segment.Line = frame.GetFileLineNumber();
                message.StackSegments.Add(segment);
            }
        }
 public DebugMessage()
 {
     _baseMethod = new StackSegment();
 }