Mono.StackFrameData.TryParse C# (CSharp) Method

TryParse() public static method

public static TryParse ( string line, StackFrameData &stackFrame ) : bool
line string
stackFrame StackFrameData
return bool
		public static bool TryParse (string line, out StackFrameData stackFrame)
		{
			stackFrame = null;

			var match = regex.Match (line);
			if (!match.Success)
				return false;

			string typeFullName, methodSignature;
			var methodStr = match.Groups ["Method"].Value.Trim ();
			if (!ExtractSignatures (methodStr, out typeFullName, out methodSignature))
				return false;

			var isILOffset = !string.IsNullOrEmpty (match.Groups ["IL"].Value);
			var offsetVarName = (isILOffset)? "IL" : "NativeOffset";
			var offset = int.Parse (match.Groups [offsetVarName].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);

			uint methodIndex = 0xffffff;
			if (!string.IsNullOrEmpty (match.Groups ["MethodIndex"].Value))
				methodIndex = uint.Parse (match.Groups ["MethodIndex"].Value, CultureInfo.InvariantCulture);

			var mvid = match.Groups ["MVID"].Value;
			var aotid = match.Groups ["AOTID"].Value;

			stackFrame = new StackFrameData (line, typeFullName, methodSignature, offset, isILOffset, methodIndex, mvid, aotid);

			return true;
		}

Usage Example

Ejemplo n.º 1
0
        public static StringBuilder Process(StreamReader reader, SymbolManager symbolManager)
        {
            List <StackFrameData>     stackFrames = new List <StackFrameData>();
            List <StackTraceMetadata> metadata    = new List <StackTraceMetadata>();
            StringBuilder             sb          = new StringBuilder();
            bool linesEnded = false;

            for (var line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                StackFrameData sfData;
                if (!linesEnded && StackFrameData.TryParse(line, out sfData))
                {
                    stackFrames.Add(sfData);
                    continue;
                }

                if (stackFrames.Count > 0)
                {
                    linesEnded = true;

                    StackTraceMetadata stMetadata;
                    if (StackTraceMetadata.TryParse(line, out stMetadata))
                    {
                        metadata.Add(stMetadata);
                        continue;
                    }

                    DumpStackTrace(symbolManager, sb, stackFrames, metadata);

                    // Clear lists for next stack trace
                    stackFrames.Clear();
                    metadata.Clear();
                }

                linesEnded = false;

                // Append last line
                sb.AppendLine(line);
            }

            if (stackFrames.Count > 0)
            {
                DumpStackTrace(symbolManager, sb, stackFrames, metadata);
            }

            return(sb);
        }
All Usage Examples Of Mono.StackFrameData::TryParse