Профилировщик кучи массива valgrind нет подробного представления снимка - как вы увеличиваете / уменьшаете масштаб?

Итак, я пытаюсь увидеть использование памяти кучи для моей программы на С++ в Ubuntu 18.

Я запустил его, используя:

valgrind --tool=massif --smc-check=all ./myprogram

Я получаю довольно большой вывод, и это нормально. Я просматриваю его с помощью массива-визуализатора.

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

На странице руководства (здесь) говорится следующее:

Massif создает несколько подробных снимков, которые, по сути, составляют дерево. Если вы хотите получить обзор более удобным способом, чем простое представление дерева, переключитесь на вкладку подробного снимка и просмотрите дерево, визуализированное в виде графика вызовов. Увеличивайте, уменьшайте масштаб, используйте вид с высоты птичьего полета и смотрите, что способствует созданию данного снимка. Обратите внимание, что вызовы функций с одинаковыми затратами памяти сгруппированы для облегчения поиска интересных частей.

Но я не вижу опции "switch over to the detailed snapshot tab"... кто-нибудь еще знает, как это сделать?

Убунту 18

массив-визуализатор 0.7


person code_fodder    schedule 30.07.2018    source источник


Ответы (1)


Вместо визуализатора массива вы можете использовать kcachegrind для визуализации памяти с помощью новой «функции xtree», появившейся в valgrind 3.13.

Вот выдержка из valgrind --help:

  user options for Valgrind tools that replace malloc:
    --alignment=<number>      set minimum alignment of heap allocations [16]
    --redzone-size=<number>   set minimum size of redzones added before/after
                              heap blocks (in bytes). [16]
    --xtree-memory=none|allocs|full   profile heap memory in an xtree [none]
                              and produces a report at the end of the execution
                              none: no profiling, allocs: current allocated
                              size/blocks, full: profile current and cumulative
                              allocated size/blocks and freed size/blocks.
    --xtree-memory-file=<file>   xtree memory report file [xtmemory.kcg.%p]

См. http://www.valgrind.org/docs/manual/manual-core.html#manual-core.xtree для получения дополнительной информации.

person phd    schedule 31.07.2018
comment
Спасибо, доктор философии, я попробовал это и прочитал документ. Но я не совсем понял, как использовать kcachegrind для простой визуализации памяти кучи. Я мог бы посмотреть на каждую строку, чтобы увидеть, что происходит, но на это ушли бы годы!... не могли бы вы немного рассказать о том, как визуализировать память с течением времени, а затем увеличить масштаб, чтобы посмотреть на конкретное увеличение/уменьшение? ...плюс 1 пока хотя про xree не знал :) - person code_fodder; 01.08.2018
comment
В своем вопросе вы указываете Но я хочу подробно посмотреть в конце моей программы. Для этого вы можете, например. используйте массив, но дополнительно добавьте --xtree-memory=full. С этой опцией вы получите файл памяти xtree, который вы можете загрузить в kcachegrind. Затем вы можете использовать, например. графическое представление kcachegrind для сканирования последовательности вызовов функций, для которых при выключении все еще выделяется много памяти. Если вы хотите найти последовательности вызовов, которые выделили много памяти, которая была освобождена, вы переключаетесь на событие «всего выделено» в kcachegrind. - person phd; 01.08.2018
comment
Вам также может быть интересно посмотреть презентацию/слайды fosdem на archive.fosdem.org/ 2017/расписание/мероприятие/valgrind_features. Что касается детальных снимков массива или пиковых снимков в формате kcachegrind: такая функция недоступна (пока?) в массиве. - person phd; 01.08.2018
comment
Большое спасибо за информацию :) - person code_fodder; 02.08.2018