Russian Qt Forum
Ноябрь 26, 2024, 06:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как найти маленькую утечеку ???  (Прочитано 6886 раз)
alex12
Гость
« : Сентябрь 01, 2009, 15:41 »

Программа очень интенсивно обновляет значения в большом количестве ячеек QTableWidget. Внутренний алгоритм большой и довольно сложный.

Происходит утечка памяти примерно 1 MB в час. Какие есть способы засечь причину, корме детального копания в коде? Какими инструментами можно воспользоваться для MingGW или Linux?
Записан
Rcus
Гость
« Ответ #1 : Сентябрь 01, 2009, 15:49 »

То есть вы поискали по форуму и отвергли все инструменты которые предлагались тех случаях? А чем ваш особенный и чем не угодил тот же Valgrind?
Записан
alex12
Гость
« Ответ #2 : Сентябрь 01, 2009, 16:07 »

За Valgrind - спасибо. Разбираюсь.
Записан
alex12
Гость
« Ответ #3 : Сентябрь 01, 2009, 16:34 »

Valgrind дает кучу ошибок внутри Qt, а откуда утечка совершенно непонятно. Грустный
Записан
Rcus
Гость
« Ответ #4 : Сентябрь 01, 2009, 16:41 »

Еще один... что у вас за версия Qt и Valgrind и опции запуска, может покажете лог? Может у нас разные представления о куче, но мне достаточно просто было отсеять ложные срабатывания от утечек памяти.
Записан
alex12
Гость
« Ответ #5 : Сентябрь 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
Записан
Rcus
Гость
« Ответ #6 : Сентябрь 01, 2009, 17:10 »

ну и ни одного срабатывания, в таком случае надо запустить на пару часиков под massif и потом разбирать деревья аллокаций Улыбающийся
Записан
alex12
Гость
« Ответ #7 : Сентябрь 01, 2009, 17:16 »

Большое спасибо. Буду разбираться. А есть ли способ не выводить в лог ложные срабатывания и откуда они вообще беруться?
Записан
Rcus
Гость
« Ответ #8 : Сентябрь 01, 2009, 17:26 »

Насколько я знаю это просто глобальные объекты, освобождать которые нет смысла (они не захватывают системные ресурсы, а память и так возвращается полностью).
Еще можно не использовать show-reachable, по крайней мере мне эта опция не помогает (основные проблемы это либо утечки на чистых указателях, выявляемые memcheck'ом, либо неконтроллируемое заполнение контейнеров - выявляется massif'ом)
« Последнее редактирование: Сентябрь 01, 2009, 17:29 от Rcus » Записан
crackedmind
Гость
« Ответ #9 : Сентябрь 01, 2009, 17:56 »

Попробуй --gen-suppressions=yes
Записан
uriel
Гость
« Ответ #10 : Сентябрь 02, 2009, 06:55 »

Делал для себя подобный велосипед. Улыбающийся
http://www.prog.org.ru/topic_10260_0.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.206 секунд. Запросов: 21.