Утечка GDI объектов - как отловить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.10.23 18:18
Оценка:
Здравствуйте!

После некоторого времени активного рисования начинает рисовать единичной черной кистью. Стал грешить на утечку GDI объектов и достижения лимита, после чего новые объекты не создаются, и используется дефолтная кисть.

Поковырял немного инеты, нашел тулзу — http://www.nirsoft.net/utils/gdi_handles.html

Она показывает, что по отдельным типа ресурсов всё хорошо, но в сумме — утекает:
  Скрытый текст


Ну и при достижении 10000 ожидаемо начинает рисоваться шляпа.

Тут вопросы — это тулза видимо что-то не показывает, какие-то типы GDI объектов, но суммарное количество GDI объектов — верное

Вопрос такой — что она могла забыть?

И как бы мне самому получать эту статистику, а в идеале — получить списки всех утекших объектом и их характеристики — так бы я мог бы быстрее наверное понять, что и как утекает
Маньяк Робокряк колесит по городу
Re: Утечка GDI объектов - как отловить?
От: vsb Казахстан  
Дата: 03.10.23 18:34
Оценка:
Попробуй https://www.deleaker.com/download.html не знаю есть ли там в триале это, но в теории умеет.

А вообще просто сумму GDI объектов можно даже в диспетчере задач смотреть.
Отредактировано 03.10.2023 18:37 vsb . Предыдущая версия .
Re: Утечка GDI объектов - как отловить?
От: qaz77  
Дата: 03.10.23 18:35
Оценка:
Здравствуйте, Marty, Вы писали:

M>Тут вопросы — это тулза видимо что-то не показывает, какие-то типы GDI объектов, но суммарное количество GDI объектов — верное


Некоторые GDI хендлы используются внутри USER объектов.
Типичный пример — иконка, внутри содержит две битмапы.
Вот такие GDI объекты не попадают в статистику gdi_handles.
Re[2]: Утечка GDI объектов - как отловить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.10.23 18:57
Оценка:
Здравствуйте, qaz77, Вы писали:

M>>Тут вопросы — это тулза видимо что-то не показывает, какие-то типы GDI объектов, но суммарное количество GDI объектов — верное


Q>Некоторые GDI хендлы используются внутри USER объектов.

Q>Типичный пример — иконка, внутри содержит две битмапы.
Q>Вот такие GDI объекты не попадают в статистику gdi_handles.

У меня пока кроме перьев, кистей и фонтов ничего не используется. По крайней мере, я явно ничего не использую
Маньяк Робокряк колесит по городу
Re[2]: Утечка GDI объектов - как отловить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.10.23 18:59
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Попробуй https://www.deleaker.com/download.html не знаю есть ли там в триале это, но в теории умеет.


Да, спс, в теории вроде умеет


vsb>А вообще просто сумму GDI объектов можно даже в диспетчере задач смотреть.


Просто сумму не интересно, я и без этого догадался, что утекают
Маньяк Робокряк колесит по городу
Re[3]: Утечка GDI объектов - как отловить?
От: Stanislav V. Zudin Россия  
Дата: 03.10.23 20:06
Оценка:
Здравствуйте, Marty, Вы писали:

M>У меня пока кроме перьев, кистей и фонтов ничего не используется. По крайней мере, я явно ничего не использую


Вряд ли у тебя создание и удаление размазано по всей программе. Значит можно сопоставить, что создано, то и удалено. Проверь, что прежде чем удалить гди-объект он убран из контекста, т.е. вызвано SelectObject(объект взамен удаляемого).
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Утечка GDI объектов - как отловить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.10.23 20:08
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

M>>У меня пока кроме перьев, кистей и фонтов ничего не используется. По крайней мере, я явно ничего не использую


SVZ>Вряд ли у тебя создание и удаление размазано по всей программе. Значит можно сопоставить, что создано, то и удалено. Проверь, что прежде чем удалить гди-объект он убран из контекста, т.е. вызвано SelectObject(объект взамен удаляемого).


Да, я уже пофиксил. Было кое-какое говнецо, переписал нормально, и течь перестало
Маньяк Робокряк колесит по городу
Re[3]: Утечка GDI объектов - как отловить?
От: T4r4sB Россия  
Дата: 03.10.23 20:09
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>У меня пока кроме перьев, кистей и фонтов ничего не используется. По крайней мере, я явно ничего не использую


Язык какой? Если С++, то всё заворачивается в
~HandleKeeper() { deleteHandle(this->HANDLE); }

И утечки должны перестать
Re[4]: Утечка GDI объектов - как отловить?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 12.10.23 05:52
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Язык какой? Если С++, то всё заворачивается в

TB>
TB>~HandleKeeper() { deleteHandle(this->HANDLE); }
TB>

TB>И утечки должны перестать

Спасибо, кэп
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.