public void EnumerateObjects(out IMDObjectEnum ppEnum) { List <ulong> refs = new List <ulong>(); for (ulong obj = m_seg.FirstObject; obj != 0; obj = m_seg.NextObject(obj)) { refs.Add(obj); } ppEnum = new MDObjectEnum(refs); }
public void DumpAllExceptions(IMDObjectEnum Exceptions) { Dictionary <string, List <ulong> > allExceptions = new Dictionary <string, List <ulong> >(); foreach (var obj in ((MDObjectEnum)Exceptions).List) { ClrException ex = m_heap.GetExceptionObject(obj); if (ex != null) { if (IsInterrupted()) { return; } string key = String.Format("{0}\0{1}\0{2}", ex.Type.Name, ex.Message, DumpStack(ex.StackTrace, m_heap.GetRuntime().PointerSize, true)); if (!allExceptions.ContainsKey(key)) { allExceptions[key] = new List <ulong>(); } allExceptions[key].Add(obj); } } int exCount = 0; int typeCount = 0; foreach (var key in allExceptions.Keys) { typeCount++; exCount += allExceptions[key].Count; Write("{0,8:#,#} of Type: {1}", allExceptions[key].Count, key.Split('\0')[0]); for (int i = 0; i < Math.Min(3, allExceptions[key].Count); i++) { Write(" <link cmd=\"!wpe {0:%p}\">{0:%p}</link>", (allExceptions[key])[i]); } ClrException ex = m_heap.GetExceptionObject((allExceptions[key])[0]); WriteLine(""); WriteLine("Message: {0}", key.Split('\0')[1]); WriteLine("Inner Exception: {0}", ex.Inner == null ? "(none)" : ex.Inner.Type.Name); WriteLine("Stack:"); WriteLine("{0}", key.Split('\0')[2]); WriteLine(""); } WriteLine("{0:#,#} Exceptions in {1:#,#} unique type/stack combinations (duplicate types in similar stacks may be rethrows)", exCount, typeCount); WriteLine(""); }
public void EnumerateFinalizerQueue(out IMDObjectEnum ppEnum) { ppEnum = new MDObjectEnum(new List <ulong>(m_runtime.EnumerateFinalizerQueue())); }
public void EnumerateFinalizerQueue(out IMDObjectEnum ppEnum) { ppEnum = new MDObjectEnum(new List<ulong>(m_runtime.EnumerateFinalizerQueue())); }
public void EnumerateObjects(out IMDObjectEnum ppEnum) { List<ulong> refs = new List<ulong>(); for (ulong obj = m_seg.FirstObject; obj != 0; obj = m_seg.NextObject(obj)) refs.Add(obj); ppEnum = new MDObjectEnum(refs); }