В Windows я смог получить необходимую информацию, используя UIforETW, который обрабатывает необходимые аргументы командной строки для xperf.
Этот пост в блоге объясняет все очень подробно: https://randomascii.wordpress.com/2015/04/27/etw-heap-tracingevery-allocation-recorded/
запись
Шаг 1. Создается запись реестра TracingFlags, для которой задано значение «1» в параметрах выполнения файла образа для каждого имени процесса, которое будет отслеживаться, чтобы указать кучи Windows настроить себя для отслеживания при запуске процесса с этим именем , Как всегда в случае с параметрами выполнения файла изображения, параметры не влияют на уже запущенные процессы - затрагиваются только процессы, запущенные, когда задан раздел реестра.
Шаг 2. Дополнительный сеанс ETW создается с помощью заклинания «-heap -Pids 0». В этом сеансе будет записана информация о процессах, для которых запись реестра TracingFlags была равна «1» при запуске.
Детали немного запутанные, но теперь, когда написан UIforETW, мне не нужно объяснять детали, и вам не нужно притворяться, что выслушиваете. Если вы хотите записать трассировку кучи, используйте UIforETW, и если вы хотите узнать, как она работает, посмотрите на код или нажмите кнопку Показать команды, чтобы увидеть большую часть грязного белья.
Анализ
Запись можно проверить с помощью WPA (Windows Performance Analyzer), который можно легко запустить из UIforETW.
Рекомендуются следующие столбцы: Process, Handle, Type, Stack.
Виды размещения:
- AIFO - Выделенный внутри Freed снаружи (подсказка, подсказка)
- AOFI - Выделенный снаружи Freed Inside
- AOFO - Выделенный вне Freed вне
- AIFI - выделенный внутри Freed Inside