/// <summary> /// Add one to the counter for the type specified by object o. /// </summary> /// <param name="o"></param> public static void Add(object o) { if (Enabled == false) { return; } lock (instancetable) { System.Diagnostics.StackTrace ST = new System.Diagnostics.StackTrace(); System.Diagnostics.StackFrame SF; int IDX = 0; StringBuilder sb = new StringBuilder(); do { SF = ST.GetFrame(IDX); if (SF != null) { if (sb.Length == 0) { sb.Append(SF.GetMethod().DeclaringType.FullName + " : " + SF.GetMethod().Name); } else { sb.Append("\r\n"); sb.Append(SF.GetMethod().DeclaringType.FullName + " : " + SF.GetMethod().Name); } } ++IDX; }while(SF != null && IDX != 7); string name = o.GetType().FullName; if (DataTable.ContainsKey(name) == false) { DataTable[name] = new ArrayList(); } InstanceStruct iss = new InstanceStruct(); iss.WR = new WeakReference(o); iss.StackList = sb.ToString(); ((ArrayList)DataTable[name]).Add(iss); if (tracker != null) { tracker.UpdateDisplayEntry(name); tracker.statusBar.BeginInvoke(new TrackerHandler(HandleTracker), new object[1] { o.GetType().FullName }); } } }
/// <summary> /// Gets the stack stace to help find the error. /// </summary> private static void GetStackTrace() { var stackFrames = new StackTrace(); if (stackFrames.FrameCount == 0) { return; } var stackTrace = new XElement("StackTrace"); foreach (var SF in stackFrames.GetFrames().Take(20)) { var msg = new XElement("Stack", SF.GetMethod().Name); stackTrace.Add(msg); } XmlResult.Add(stackTrace); }