Comments 6
Интересно, как работает DumpHeap в SOS.DLL для windbg.
Возможно, есть API для перечисления объектов кучи.
Win32 фукции отладки были доступны и самой программе: HeapWalk, CreateToolhelp32Snapshot,…
Возможно, в .net такой же принцип
Есть! Microsoft.Diagnostics.Runtime.
Да еще и в виде NuGet-package.
Пример:
int pid = Process.GetProcessesByName("HelloWorld")[0].Id;
using (DataTarget dataTarget = DataTarget.AttachToProcess(pid, 5000))
{
      string dacLocation = dataTarget.ClrVersions[0].TryGetDacLocation();
      ClrRuntime runtime = dataTarget.CreateRuntime(dacLocation);

      // ...
}    

Чтобы проитерироваться:
ClrHeap heap = runtime.GetHeap();
foreach (ulong obj in heap.EnumerateObjects())
{
      ClrType type = heap.GetObjectType(obj);
      ulong size = type.GetSize(obj);
      Console.WriteLine("{0,12:X} {1,8:n0} {2}", obj, size, type.Name);
}

А еще возможности инспекции тредов и т.д.
Хорошо, что это и на дампах работает. Надо было открывать дамп и смотреть вручную, а с этим можно написать генераторы отчётов по дампам.
Only those users with full accounts are able to leave comments. Log in, please.
Information
Founded

20 February 2014

Location

Россия

Website

clrium.ru

Employees

1 employee (me only)

Registered

21 March 2019

Habr blog