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

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

2 мин на чтение

Интегрированные среды разработки вроде 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. Аналогично можно настроить запуск любого инструмента.


Обсудить в Телеграм


Свежие записи

Как разбить проект CMake на подпроекты

Как разбить проект CMake на подпроекты

Разделяем на подпроекты существующий проект C++ на CMake

1 мин на чтение

Как создать оконное приложение на Qt в среде QtCreator

Как создать оконное приложение на Qt в среде QtCreator

Учимся создавать свое первое оконное приложение на Qt с использованием QMainWindow в среде QtCreator

6 мин на чтение

Как создать 3D модель с помощью OpenCASCADE на C++ в среде QtCreator

Как создать 3D модель с помощью OpenCASCADE на C++ в среде QtCreator

Учимся создавать свою первую 3D модель тора в OpenCASCADE

3 мин на чтение

Как работать с пул-реквестами в личном репозитории GitHub

Как работать с пул-реквестами в личном репозитории GitHub

Учимся работать с пул-реквестами на GitHub в личных репозиториях

3 мин на чтение

Как исследовать exe-файлы с Cutter. Практика обратной разработки

Как исследовать exe-файлы с Cutter. Практика обратной разработки

Простейший пример исследования и патчинга исполняемого файла с помощью Cutter

2 мин на чтение