You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.150
Former-commit-id: 73e3bb1e96dd09dc931c1dfe559d2c7f7b8b02c7
This commit is contained in:
parent
02ac915603
commit
b95516a3dd
@@ -80,8 +80,16 @@ namespace Mono
|
||||
var symbolManager = new SymbolManager (msymDir, logger);
|
||||
|
||||
using (StreamReader r = new StreamReader (inputFile)) {
|
||||
var sb = Process (r, symbolManager);
|
||||
Console.Write (sb.ToString ());
|
||||
for (var line = r.ReadLine (); line != null; line = r.ReadLine ()) {
|
||||
StackFrameData sfData;
|
||||
if (StackFrameData.TryParse (line, out sfData) &&
|
||||
symbolManager.TryResolveLocation (sfData)) {
|
||||
Console.WriteLine (sfData.ToString ());
|
||||
continue;
|
||||
}
|
||||
|
||||
Console.WriteLine (line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,88 +102,5 @@ namespace Mono
|
||||
|
||||
symbolManager.StoreSymbols (lookupDirs);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
private static void DumpStackTrace (SymbolManager symbolManager, StringBuilder sb, List<StackFrameData> stackFrames, List<StackTraceMetadata> metadata)
|
||||
{
|
||||
string aotid = null;
|
||||
var aotidMetadata = metadata.FirstOrDefault ( m => m.Id == "AOTID" );
|
||||
if (aotidMetadata != null)
|
||||
aotid = aotidMetadata.Value;
|
||||
|
||||
var linesMvid = ProcessLinesMVID (metadata);
|
||||
var lineNumber = -1;
|
||||
foreach (var sfData in stackFrames) {
|
||||
string mvid = null;
|
||||
lineNumber++;
|
||||
if (!sfData.IsValid)
|
||||
continue;
|
||||
if (linesMvid.ContainsKey (lineNumber))
|
||||
mvid = linesMvid [lineNumber];
|
||||
|
||||
symbolManager.TryResolveLocation (sfData, mvid, aotid);
|
||||
|
||||
sb.AppendLine (sfData.ToString ());
|
||||
}
|
||||
|
||||
foreach (var m in metadata)
|
||||
sb.AppendLine (m.Line);
|
||||
}
|
||||
|
||||
private static Dictionary<int, string> ProcessLinesMVID (List<StackTraceMetadata> metadata)
|
||||
{
|
||||
var linesMvid = new Dictionary<int, string> ();
|
||||
var mvidData = metadata.Where ( m => m.Id == "MVID" ).Select ( m => m.Value );
|
||||
foreach (var m in mvidData) {
|
||||
var s1 = m.Split (new char[] {' '}, 2);
|
||||
var mvid = s1 [0];
|
||||
var lines = s1 [1].Split (',');
|
||||
foreach (var line in lines)
|
||||
linesMvid.Add (int.Parse (line), mvid);
|
||||
}
|
||||
|
||||
return linesMvid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user