Как запустить анализатор утечек памяти DrMemory из QtCreator

Как запустить анализатор утечек памяти DrMemory из QtCreator

Учимся запускать сторонние приложения из QtCreator на примере DrMemory

Интегрированные среды разработки вроде QtCreator стремятся обеспечить программиста всем необходимым, чтобы он как можно реже выходил из среды. Да, удобно работать с универсальным инструментом. Но все потребности покрыть невозможно. В этой статье рассмотрим как запускать сторонние программы из QtCreator на примере анализатора утечек памяти DrMemory.

Для запуска DrMemory предлагаю добавить в проект QtCreator новую конфигурацию запуска. При открытом проекте переходим на вкладку настроек проекта (1), открываем страницу с конфигурациями запуска (2) и запускаем создание новой конфигурации (3). В открывшемся окне выбираем пункт "Custom Executable" (4), который не соответствует ни одной из целей сборки, и жмем "Create" (5).

Созданную конфигурацию рекомендую переименовать во что-то более осмысленное, чем имя по умолчанию. Например, в "DrMemoryRunner".

Теперь заполняем параметры конфигурации запуска. В поле "Executable:" (1) указываем полный путь к исполняемому файлу программы drmemory.exe. В аргументах командной строки (2) указываем команду для запуска анализатора: -- %{buildDir}/bin/tst_Common.exe. Здесь %{buildDir} - это переменная QtCreator, содержащая путь к сборочной директории проекта, а tst_Common.exe - целевая программа, которую мы хотим анализировать. В качестве рабочей директории (3) рекомендую указать папку с исполняемым файлом: так бывает проще найти выходные данные. Но в общем случае это не принципиально.

На этом этапе можно считать конфигурацию готовой. Остается разобраться с некоторыми особенностями. В случае с особой конфигурацией запуска QtCreator не добавляет в переменную окружения Path пути к необходимым для запуска библиотекам. Среда просто не знает, какие нужно добавлять. Поэтому если указанное в конфигурации приложение не запускается, придется самостоятельно прописать пути к библиотекам в Path (4).

Для добавления директории в переменную Path разворачиваем шторку "Details" (1) блока переменных окружения "Environment". Там находим строку Path (2) и добавляем в нее нужные пути через "Append path..." (3).

Для переключения QtCreator на созданную конфигурацию запуска открываем панель выбора конфигураций (1) и для текущей конфигурации сборки (2) выбираем только что созданную конфигурацию запуска анализатора (3).

При запуске анализатора (1) весь его консольный вывод (2) попадет на вкладку терминала "Terminal" (3). В самом конце вывода мы увидим, были ли обнаружены утечки памяти. Например, на скрине ниже обнаружена 1 утечка на 4 байта (2).

Подробности по каждой конкретной утечке памяти выводятся немного раньше. Нужно прокрутить вывод анализатора вверх и найти блок с заголовком "ERROR #..: LEAK ..." (1). Этот блок содержит стек вызовов, в котором была обнаружена данная утечка. По стеку находим проблемную строку нашего кода, в которой была выделена "потёкшая" память (2). Для каждой обнаруженной утечки выводится свой блок со стеком.

Остается еще одна проблема, которая доставляет неудобства, - DrMemory после окончания работы автоматически открывает Блокнот с результатами анализа. Это лишнее, так как информация в Блокноте дублирует вывод в QtCreator. Отключить запуск Блокнота можно ключом --batch.

Таким образом анализатор DrMemory может использоваться напрямую из среды QtCreator. Аналогично можно настроить запуск любого инструмента.


Телеграм: Так себе программист