![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Спустя 20-40 минут работы приложение падает на строчке, в которой создается CreateCompatibleBitmap().
Есть подозрение, что где-то во время прорисовки не сделан DeleteObject(). Но никак не могу найти, где это, прорисовки в приложении достаточно много. Есть ли какое-нибудь средство, чтобы узнать остаток ресурсов до вызова какой-либо функции, а затем после нее? Спасибо. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
http://forum.vingrad.ru/index.php?showtopi...t&p=1456493 - тоже проблемы с CreateCompatibleBitmap.
Диспетчер задач -> Процессы -> Вид -> Выбрать столбцы -> [v] Объекты GDI. Или ProcessExplorer. |
|||
|
||||
S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Windows сама очищает память после отработки процесса. Так что совсем не обязательно удалять ресурсы.
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Как это сама очищает? Вообще-то всю жизнь было, забыл где-то деструктор запустить - через какое-то время приложение выжрет память и свалится. Так же и с ресурсами получается...
586, Спасибо, о том, что можно в диспетчере задач посмотреть ресурсы - не знал. Приложение действительно жрет ресурсы. Заменил сейчас в одном месте DeleteDC() на ReleaseDC() - теперь ресурсы "стоят на месте", приложение уже 10 минут работает стабильно, посмотрим, что будет дальше ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
После, конечно, очищает, только при исчерпании ресурсов в течении процесса от этого ни жарко, ни холодно... -------------------- ... |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Какие еще есть способы поиска утечек с использованием GDI ?
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Dreamer_0x01
внимательно читай MSDN по WinAPI функциям, в конце описания на каждую функцию имеется ремарка, в которой указывается парная функция для работы с описываемой функции и пример если не понятно. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Можно еще завернуть соответствующие дескрипторы GDI в классы, заменить все вхождения на указатели на объекты этих классов и искать уже обычные memory-leaks. Такой вот глобальный подход. Но после этого, скорее всего, появится еще пачка попутных проблем, которые, скорее всего, проще было бы избежать банальным анализом исходного кода на наличие "закрывающих скобок", о которых писал Dem_max ![]() Это сообщение отредактировал(а) GremlinProg - 23.1.2013, 15:59 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Alca |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
это и так понятно
С99 Есть такая утилита GDIView, пишут, что можно задетектить ресоурс лики. Но я так понял, что показывает, только общее кол-во декрипторов, т.е. если кол-во хендлов постоянно увеличивается - тогла лик. И это единственный функционал который помогает ловить утечки, который есть уже в таскменеджере. GDIView выходит, что бесполезная вещь? Я прав? Еще есть такое: http://www.relisoft.com/win32/gdileaks.html
что скажите? Это сообщение отредактировал(а) Alca - 23.1.2013, 16:11 |
||||||
|
|||||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
можно и так, только в каждую функцию в которой вызываются GDI ресурсы нужно вставлять код в начало функции и в конец, и логгировать, тогда точно будешь знать в какой твоей функции утечки. Но со временем когда руку набъешь не будешь делать ошибок при освобождении ресурсов. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
По последней ссылке, насколько я успел понять, анализ утечки так же на основе проверки числа ресурсов,
т.е. ставится начальный замер (в конструкторе) и конечный - в деструкторе, соответственно, их ненулевая разница говорит о том, что на время жизни DbgGuiLeak была утечка. Постепенно сужая life-time этого объекта, можно определить точное место (метод), где утечка произошла. По моему - хорошая альтернатива. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 5 Всего: 64 |
Я бы попробовал в такой ситуации заюзать умные указатели - просто и сердито. Правда, об этом нужно было думать изначально, т.к. теперь придётся всё это переделывать.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Дело в том, что не я писал этот код и к тому же там чистый С (без классов).
Это сообщение отредактировал(а) Alca - 23.1.2013, 22:50 |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
AQTime не пробовали? меня когдато интересовало чего с моей программой делается под Вин98 в плане графических ресурсов, тогда она этот анализ плохо делала (именно под Вин98). По XP, по-моему прям тыкала в строчку кода, где не удаленный объект создавался.(естественно Debug версия + pch enabled).
Это сообщение отредактировал(а) deniska - 25.1.2013, 14:40 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
забыл сказать, что юзаю MinGW
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |