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;
}