Russian Qt Forum

Qt => Общие вопросы => Тема начата: alex12 от Сентябрь 01, 2009, 15:41



Название: Как найти маленькую утечеку ???
Отправлено: alex12 от Сентябрь 01, 2009, 15:41
Программа очень интенсивно обновляет значения в большом количестве ячеек QTableWidget. Внутренний алгоритм большой и довольно сложный.

Происходит утечка памяти примерно 1 MB в час. Какие есть способы засечь причину, корме детального копания в коде? Какими инструментами можно воспользоваться для MingGW или Linux?


Название: Re: Как найти маленькую утечеку ???
Отправлено: Rcus от Сентябрь 01, 2009, 15:49
То есть вы поискали по форуму и отвергли все инструменты которые предлагались тех случаях? А чем ваш особенный и чем не угодил тот же Valgrind?


Название: Re: Как найти маленькую утечеку ???
Отправлено: alex12 от Сентябрь 01, 2009, 16:07
За Valgrind - спасибо. Разбираюсь.


Название: Re: Как найти маленькую утечеку ???
Отправлено: alex12 от Сентябрь 01, 2009, 16:34
Valgrind дает кучу ошибок внутри Qt, а откуда утечка совершенно непонятно. :(


Название: Re: Как найти маленькую утечеку ???
Отправлено: Rcus от Сентябрь 01, 2009, 16:41
Еще один... что у вас за версия Qt и Valgrind и опции запуска, может покажете лог? Может у нас разные представления о куче, но мне достаточно просто было отсеять ложные срабатывания от утечек памяти.


Название: Re: Как найти маленькую утечеку ???
Отправлено: alex12 от Сентябрь 01, 2009, 17:05
Тестовая Linux машина у меня несколько устарела.
OpenSUSE 11.1
gcc 4.3.1
Qt 4.4.3
valgrind-3.3.0

Запускаю так:

valgrind --leak-check=full --show-reachable=yes ./mkstudio

log: http://transmeta.inkommet.ru/~alex/log.txt


Название: Re: Как найти маленькую утечеку ???
Отправлено: Rcus от Сентябрь 01, 2009, 17:10
ну и ни одного срабатывания, в таком случае надо запустить на пару часиков под massif и потом разбирать деревья аллокаций :)


Название: Re: Как найти маленькую утечеку ???
Отправлено: alex12 от Сентябрь 01, 2009, 17:16
Большое спасибо. Буду разбираться. А есть ли способ не выводить в лог ложные срабатывания и откуда они вообще беруться?


Название: Re: Как найти маленькую утечеку ???
Отправлено: Rcus от Сентябрь 01, 2009, 17:26
Насколько я знаю это просто глобальные объекты, освобождать которые нет смысла (они не захватывают системные ресурсы, а память и так возвращается полностью).
Еще можно не использовать show-reachable, по крайней мере мне эта опция не помогает (основные проблемы это либо утечки на чистых указателях, выявляемые memcheck'ом, либо неконтроллируемое заполнение контейнеров - выявляется massif'ом)


Название: Re: Как найти маленькую утечеку ???
Отправлено: crackedmind от Сентябрь 01, 2009, 17:56
Попробуй --gen-suppressions=yes


Название: Re: Как найти маленькую утечеку ???
Отправлено: uriel от Сентябрь 02, 2009, 06:55
Делал для себя подобный велосипед. :)
http://www.prog.org.ru/topic_10260_0.html