Skip to content

Commit

Permalink
[corlib] Added MVID metadata to StackTrace
Browse files Browse the repository at this point in the history
The MVID metadata handler displays multiple MVID(s) followed by the
 comma separated list of StackFrame lines whose method belongs to the
module with the displayed MVID.
  • Loading branch information
esdrubal committed Jul 8, 2016
1 parent 55e2293 commit d7834ea
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions mcs/class/corlib/System.Diagnostics/StackTrace.cs
Expand Up @@ -328,6 +328,26 @@ static void InitMetadataHandlers ()
string aotid = Assembly.GetAotId ();
if (aotid != "00000000-0000-0000-0000-000000000000")
AddMetadataHandler ("AOTID", st => { return aotid; });

AddMetadataHandler ("MVID", st => {
var mvidLines = new Dictionary<Guid, List<int>> ();
var frames = st.GetFrames ();
for (var lineNumber = 0; lineNumber < frames.Length; lineNumber++) {
var mvid = frames[lineNumber].GetMethod ().Module.ModuleVersionId;
if (!mvidLines.ContainsKey (mvid))
mvidLines.Add (mvid, new List<int> ());
mvidLines[mvid].Add (lineNumber);
}
var sb = new StringBuilder ();
foreach (var kv in mvidLines) {
var mvid = kv.Key.ToString ().ToUpper ();
sb.AppendLine (string.Format ("{0} {1}", mvid, string.Join (",", kv.Value)));
}
return sb.ToString ();
});
}

private static void AddMetadataHandler (string id, Func<StackTrace, string> handler)
Expand Down

0 comments on commit d7834ea

Please sign in to comment.