Могу ли я использовать ClrMD для прохождения только тех объектов, которые используются процессом на переднем плане?

В настоящее время я могу получить все объекты, которые присутствуют в куче, используя приведенный ниже код, используя ClrMD. Можно ли получить только набор объектов, которые используются в целевом процессе (т. Е. Только те объекты, которые находятся в пределах исходного кода целевого процесса).

var types = heap.EnumerateObjectAddresses()
           .GroupBy(obj => heap.GetObjectType(obj).Name)
           .Select(group => new { Key = group.Key, Count = group.Count() })
           .OrderBy(type => type.Count);

foreach (var type in types)
Console.WriteLine("{0} {1}", type.Key, type.Count);
Console.ReadLine();

1 ответ

Решение

Насколько я знаю, в профиле VS есть функция сбора всех вызывающих (объектов, функций) функции во время работы программы. это то, что вы хотите получить?

Ссылка:

Как вывести список всех вызовов функции во время выполнения?

Обновить:

CLrMD имеет классы для перечисления информации PDB. Я предлагаю вам попробовать использовать класс DataTarget для перечисления параметров / локальных элементов стекового фрейма. Для этого им придется добавить код в класс DataTarget, так как он не выглядит так, как будто в настоящее время поддерживает его.

Другие вопросы по тегам