Поиск утечек памяти с помощью mpr

Возможности mtrace () в glibc достаточно неплохие, но профилировщик распределения памяти mpr (http: //www3. telus. net/taj_khattra/mpr. html) в некоторых аспектах более прост в использовании и содержит более совершенные сценарии для обработки выходных журнальных файлов.

Мини-картинка

Первый шаг в применении mpr (после сборки кода с включенной отладочной информацией ) состоит в установке переменной окружения MPRFI, которая указывает mpr, с какой командой связывать журнал (если переменная не установлена, журнал не генерируется). Для небольших программ MPRFI устанавливается подобно cat >mpr. log. Для программ покрупнее MPRFI можно существенно сэкономить пространство за счет сжатия журнального файла во время его записи, установив MPRFI в gzip 1 >mpr. log. gz.

Самый легкий способ — воспользоваться сценарием mpr для запуска программы; если MPRFI еще не установлена, она получит значение gzip 1 >log.%p. gz, что приведет к созданию журнального файла с идентификатором процесса отлаживаемой программы и загрузке библиотеки mpr. В результате сборка программы не понадобится. Ниже показан пример создания журнального файла для исправленной версии нашей тестовой программы.

$ MPRFI"cat >mpr. log" mpr./broken 1 12345 2 12345678 3 12345678 4 12345 5 12345 6 12345 7 12345 $ Is 1 mpr. log rwrwr— 1 ewt ewt 142 May 17 16:22 mpr. log После создания журнального файла доступны многие средства для его анализа. Все эти программы получают журнальный файл mpr в качестве стандартного ввода. Если вывод из этих средств содержит числа в тех местах, где ожидаются имена функций (возможно, с предупреждением вроде "cannot map рс to name" ("невозможно отобразить программный счетчик на имя")), проблема может быть связана с версией утилиты awk, которую использует mpr. В документации mpr для достижения лучших результатов рекомендуется экспортировать переменную окружения MPRAWK для выбора mawk в качестве версии awk: export MPRAWK'mawk W sprintf4096'. Кроме того, сбить с толку mpr может еще и рандомизация стека, которая обеспечивается функциональностью ядра "Execshield"; исправить положение можно за счет использования команды setarch, отключающей Execshield во время работы исследуемой программы и во время работы фильтров mpr: setarch i386 mpr программа и setarch i386 mprmap...

В конечном итоге для некоторых стековых фреймов mpr может не найти символическое имя; в этом случае просто проигнорируйте их.

mprmap программа преобразует адреса программы в журнале mpr в имена функций и местоположения в исходном коде. В аргументе указывается Ьмя исполняемого файла, для которого должен генерироваться журнал. Чтобы увидеть все распределения в программе вместе с цепочкой вызовов функций, которые осуществили эти распределения, можно использовать mprmap программа mpr. log. По умолчанию отображаются имена функций. При указании флажка f отображаются также имена файлов, а при указании 1 — еще и номера строк внутри файлов. Флажок 1 подразумевает наличие f. Вывод этой программы является допустимым журнальным файлом mpr, который может быть связан каналом с любой другой утилитой mpr.

Мини-картинка
Ведете ли вы блог?

Да
Нет
Планирую


Результаты опроса

Новостной блок