Как проверить выделение кучи при пошаговой отладке через приложение? - PullRequest
2 голосов
/ 24 июня 2019

Мне нужно проверить потребление памяти определенной частью программы. На данный момент меня интересуют не утечки, а просто вопрос, когда программа распределяет объекты в куче. Я могу проследить распределение до определенных методов, но теперь мне нужно приблизиться. В идеале я хотел бы пошагово отлаживать код, чтобы добраться до критической секции, и на каждом последующем шаге получать информацию о том, какая память была выделена и где.

Я пытался использовать valgrind --massif по-разному. Самым близким, что я получил, было использование vgdb и создание снимка до и после интересующего меня раздела, а затем сравнение их вручную в массиве-визуализаторе. Однако мне кажется, что я не могу установить пороги или игнорировать методы таким образом, чтобы было видно небольшое выделение (<1 мБ), поскольку программа выделяет несколько сотен мегабайт во время запуска. </p>

Я также попробовал gperftools heapprofiler, но продвинулся немного дальше.

(я также пробовал heaptrack, но пока не смог скомпилировать инструменты графического интерфейса)

Мне кажется, что я что-то здесь упускаю и усложняю, чем должно быть. Как проверить распределение кучи при пошаговой отладке моего приложения?

CentOS7 3,10, ГЦК 4,8,5

Обновление: это повторяющаяся задача, и я не всегда могу перекомпилировать sw. Я ищу общее решение, которое можно эффективно повторить при анализе «странного» потребления памяти. С коммерческими инструментами все будет в порядке, пока они работают. получить работу.

1 Ответ

0 голосов
/ 24 июня 2019

Если у вас возникли проблемы с внешними инструментами, вы также можете выполнить грубое профилирование в коде.

Вы можете переопределить статический новый оператор для каждого класса.Это позволит вам регистрировать / распечатывать имена, размеры и т. Д., А также выполнять первоначальную фильтрацию - например, с лимитом в 1 МБ.В качестве альтернативы вы можете переопределить глобально новый оператор для перехвата всех выделений.

Если вы используете стандартные библиотечные контейнеры, настраиваемые распределители также могут использоваться для отслеживания, если они более активны.

Как только выделения находятся под вашимконтроль, вы должны иметь возможность включить / отключить ведение журнала один раз в критическом разделе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...