[corlib] Added MVID metadata to StackTrace
authorMarcos Henrich <marcos.henrich@xamarin.com>
Fri, 20 May 2016 11:14:27 +0000 (12:14 +0100)
committerMarcos Henrich <marcos.henrich@xamarin.com>
Fri, 8 Jul 2016 21:40:38 +0000 (22:40 +0100)
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.

mcs/class/corlib/System.Diagnostics/StackTrace.cs

index 8b3f76a439e41338abd97c8a61e04b1bc1d2bfc1..9cd19d159dc2410f12ae3f348a1f5b08e67a3cd9 100644 (file)
@@ -332,6 +332,26 @@ namespace System.Diagnostics {
                        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)