title | seoTitle | seoDescription | datePublished | cuid | slug | cover | tags |
---|---|---|---|---|---|---|---|
Как запустить анализатор утечек памяти DrMemory из QtCreator |
Как запустить анализатор утечек памяти DrMemory из QtCreator |
Учимся запускать сторонние приложения из QtCreator на примере DrMemory |
Fri Jan 12 2024 08:09:56 GMT+0000 (Coordinated Universal Time) |
clracyioj000409l4hyrh5wgi |
kak-zapustit-analizator-utechek-pamyati-drmemory-iz-qtcreator |
cpp, memory-leak, qt-creator, drmemory, utechka-pamyati, analiz-utechek-pamyati |
Интегрированные среды разработки вроде QtCreator стремятся обеспечить программиста всем необходимым, чтобы он как можно реже выходил из среды. Да, удобно работать с универсальным инструментом. Но все потребности покрыть невозможно. В этой статье рассмотрим как запускать сторонние программы из QtCreator на примере анализатора утечек памяти DrMemory.
Для запуска DrMemory предлагаю добавить в проект QtCreator новую конфигурацию запуска. При открытом проекте переходим на вкладку настроек проекта (1), открываем страницу с конфигурациями запуска (2) и запускаем создание новой конфигурации (3). В открывшемся окне выбираем пункт "Custom Executable" (4), который не соответствует ни одной из целей сборки, и жмем "Create" (5).
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702726573002/3201b167-f68b-472e-9018-b669902a64e4.png align="center")
Созданную конфигурацию рекомендую переименовать во что-то более осмысленное, чем имя по умолчанию. Например, в "DrMemoryRunner".
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702726699680/b5e7d752-f562-4425-9422-c19626a77dd5.png align="center")
Теперь заполняем параметры конфигурации запуска. В поле "Executable:" (1) указываем полный путь к исполняемому файлу программы drmemory.exe. В аргументах командной строки (2) указываем команду для запуска анализатора: -- %{buildDir}/bin/tst_Common.exe
. Здесь %{buildDir}
- это переменная QtCreator, содержащая путь к сборочной директории проекта, а tst_Common.exe
- целевая программа, которую мы хотим анализировать. В качестве рабочей директории (3) рекомендую указать папку с исполняемым файлом: так бывает проще найти выходные данные. Но в общем случае это не принципиально.
На этом этапе можно считать конфигурацию готовой. Остается разобраться с некоторыми особенностями. В случае с особой конфигурацией запуска QtCreator не добавляет в переменную окружения Path пути к необходимым для запуска библиотекам. Среда просто не знает, какие нужно добавлять. Поэтому если указанное в конфигурации приложение не запускается, придется самостоятельно прописать пути к библиотекам в Path (4).
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702726857571/e56f7d55-09ae-4704-9f04-8719cdf3f3df.png align="center")
Для добавления директории в переменную Path разворачиваем шторку "Details" (1) блока переменных окружения "Environment". Там находим строку Path (2) и добавляем в нее нужные пути через "Append path..." (3).
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702726959198/632d5cab-cafe-43a5-ba8b-9984a19ef4e0.png align="center")
Для переключения QtCreator на созданную конфигурацию запуска открываем панель выбора конфигураций (1) и для текущей конфигурации сборки (2) выбираем только что созданную конфигурацию запуска анализатора (3).
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702727233907/a72020c3-b3fb-4838-b1e4-6d91546e7762.png align="center")
При запуске анализатора (1) весь его консольный вывод (2) попадет на вкладку терминала "Terminal" (3). В самом конце вывода мы увидим, были ли обнаружены утечки памяти. Например, на скрине ниже обнаружена 1 утечка на 4 байта (2).
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702727954354/5b097293-a587-480f-bfa3-ad692829dacd.png align="center")
Подробности по каждой конкретной утечке памяти выводятся немного раньше. Нужно прокрутить вывод анализатора вверх и найти блок с заголовком "ERROR #..: LEAK ..." (1). Этот блок содержит стек вызовов, в котором была обнаружена данная утечка. По стеку находим проблемную строку нашего кода, в которой была выделена "потёкшая" память (2). Для каждой обнаруженной утечки выводится свой блок со стеком.
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702728260731/ea96d107-cbf6-43f8-aee6-6ca59473c434.png align="center")
Остается еще одна проблема, которая доставляет неудобства, - DrMemory после окончания работы автоматически открывает Блокнот с результатами анализа. Это лишнее, так как информация в Блокноте дублирует вывод в QtCreator. Отключить запуск Блокнота можно ключом --batch
.
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702728296116/3fabef94-5656-4eb4-ab30-e0045b879191.png align="center")
![](https://cdn.hashnode.com/res/hashnode/image/upload/v1702728328848/6140173f-289c-4792-b207-0506fdc4b8fc.png align="center")
Таким образом анализатор DrMemory может использоваться напрямую из среды QtCreator. Аналогично можно настроить запуск любого инструмента.
Телеграм: Так себе программист