Большой Воронежский Форум
» Программирование>RAD Studio и утечки памяти
Spectator 16:13 20.07.2014
В общем, дело такое. В относительно свежей редакции RAD Studio обнаружился крайне неприятный глюк.
Создаем стандартный Win32 проект, пусть будет обычный гуёвый, в FormShow или по кнопке, не важно, главное чтобы код сработал после запуска, выделяем с помощью обычного оператора new область памяти, произвольного объема.
Теперь пробуем программу завершить, штатным образом, по "крестику", кнопке выхода, через меню, не важно.
и... падаем. где то в дебрях VCL.

RAD Studio - это, кто вдруг не в курсе, последнее название прожекта ранее известного как С++ Builder / Delphi.

Собственно вопрос основной: как с этим жить? Первое что пришло в голову - сторонний детектор утечек памяти, что в любом случае вещь полезная. Кто какой может посоветовать проверенный на собственной шкуре, и именно в контексте хорошей интеграции с актуальной версией RAD Studio? Которая очень актуально не дает закрыться корректно программе из-за банально забытого освобождения памяти. Если кто знает другое грамотное решение довольно пикантной ситуации - с благодарностью выслушаю.

Вариант писать программы как истинный самурай, без единой ошибки, безусловно интересен, но не очень... так что прошу не предлагать))) Интересно услышать того кто на практике с этим сталкивался и какое то грамотное решение, быть может в настройках? нашел и готов безвозмездно поделиться с общественностью, как минимум в моем лице.

Версия RAD Studio если у кого какая более менее хотя бы свежая есть, где подобное не наблюдается, тоже с интересом бы узнал номер билда / апдейта / патча. А то как то грустно слишком, вроде бы софтинка стала заметно приятнее в общении, со времен когда она была билдеро-дельфей, но вот такой косяк перечеркивает все плюсы.

Вообще у меня такое ощущение что это какая-то криво работающая фича, которая хочет сообщить об утечке, но вместо этого где то глючит сама... если можно штатными средствами самой студии это поправить, было бы совсем здорово если бы кто подсказал.

Побочные вопросы по продуктам линейки RAD Studio если тут будут - тему переименую / переоформлю , я не против совершенно, наоборот лучше темы не плодить. [Ответ]
Hopkroft 18:26 20.07.2014
Spectator, Eurekalog вам в помощь. С помощью неё обнаруживал утечки в приложениях написанных в CodeGear.
Но у меня есть подозрение, что может глючит какой-то компонент, который ставиться для "прокачки" самой IDE.
Непонятно и ещё одно, какая версия CodeGEar используется и что будет, если просто собрать проект и запустить его отдельно от IDE.
Продукт который я описал выше - позволяет интегироваться в приложение, и в дальнейшем даёт возможность получать отчёт о работы программы. Вроде как даже триалка у него есть. Но можно найти и .... вообщем если что - пиши в личку, кину ссылку. ХОтя найти особого труда не составляет [Ответ]
Spectator 19:12 20.07.2014

Сообщение от Hopkroft:
Spectator, Eurekalog вам в помощь. С помощью неё обнаруживал утечки в приложениях написанных в CodeGear

спасибо! на вид что-то интересное, как минимум.
уже смотрю. с покупкой лицензионной версии я, думаю, справлюсь как нибудь самостоятельно))) триалку уже поставил, сегодня же поковыряю. отпишусь тогда по результатам отдельно. мне да, отслеживания утечек будет вполне достаточно. сверхмощное что-то не нужно, вроде адекватный код пишу относительно)) но вот после активного использования VS в своё время, мне очень сильно не хватает конкретно этого. там всё просто - не освободил память, на выходе получил дамп, и по шее от начальника, если он в этот момент оказался рядом))) а тут столько лет прошло, и такой элементарной вещи не догадались сделать.
я на днях просто пошел покурить, с запущенной программой, вернулся и TaskMan'е увидел что откушал три гига памяти. мне что то реально дурно стало, я к таким цифрам не привык еще.
в таймере, 50-миллисекундном (скорость выполнения функции тестировал), в совершенно сыром проекте чуток совсем не освободил, ага.
[Ответ]
DWanek 19:22 20.07.2014

Сообщение от Spectator:
сторонний детектор утечек памяти

Очень долгое время используем для delphi менеджер под названием FastMM http://sourceforge.net/projects/fastmm/ Очень довольны.

Вместе с оператором New(), вроде как, нужно в конце использовать оператор Dispose(), который очищает эту выделенную память. При достаточно большом разнообразии задач ни разу не пользовался этими операторами. Для работы с произвольными данными, которые нужно хранить в памяти, читать, писать, копировать, сохранять и т.д. пользуюсь классами типа TStream или TMemoryStream. [Ответ]
Spectator 19:45 20.07.2014

Сообщение от DWanek:
Очень долгое время используем для delphi менеджер под названием FastMM http://sourceforge.net/projects/fastmm/ Очень довольны.

ну это я в курсе, спасибо всё равно, но нечто подобное я между делом уже сам написал. хотелось бы что-то посерьезнее. я, к сожалению, New / Dispose в сишном эквиваленте использую гораздо чаще чем TStream))) [Ответ]
Hopkroft 21:06 20.07.2014
DWanek, а что за контора, которая сейчас Delphi использует? Знаю 2 таких, одна где завод Калина сидит, другая рядом в Бизнес центре, для банка софт пишет. Случаем не оттуда? [Ответ]
DWanek 05:15 21.07.2014
Hopkroft, нет. Вот это сделали, сейчас развиваем и дописываем: http://ufo-game.ru/ Не сайт естественно, а игру [Ответ]
Hopkroft 09:52 21.07.2014
DWanek, круто! Успехов и процветания проекту! [Ответ]
Spectator 15:28 23.07.2014
Hopkroft, докладаю... в общем и целом оно встало. проект собирается и запускается.
EMemLeaksBCB.cpp в проект добавлен.
в Packages добавил EurekalogExpert.bpl, вроде нормально встал. но тут начались фокусы. фокус первый - в диалоге Components, вызываемого по кнопке Components из Project Options указано что внутре у ней две компоненты - TEurekaLog и TEurekaLog7. Фокус второй - в режиме дизайна формы в окне Tool Palette есть библиотека EurekaLog, но внутри только TEurekaLog. Который если кинуть на форму и запустить программу приводит к следующему результату

Debug Output:
ExceptionLog unit and TEurekaLog component can only be used in compatibility mode.

Please, use ExceptionLog7 and TEurekaLog7 component for new applications without compatibility mode enabled.


заюзать TEurekaLog7 я не могу так просто, поскольку его нет в палитре компонент. Не было у вас такой хрени? [Ответ]
Hopkroft 16:21 23.07.2014
Spectator, ну у меня работам с этим продуктом заключалась в проставлении галки Активировать Eurekalab(В настройках проекта). Потом протыкал галки, что мне нужно искать. Очень немаловажный момент в том, что настройки самой IDE влияют на те ошибки, которые будет отлавливать EurekaLab.
После этого собирал проект, и в процессе работы, выскакивало окошко этого продукта, где было сказано в каком месте у меня утечка или другая бяка.
До исползования компонентом как-то руки не дошли, да и полученной информации мне оказалось достаточно. [Ответ]
Spectator 16:37 23.07.2014
Hopkroft, ну я понял, установкой конкретной компоненты обычно один человек в конторе и заведует, я понимаю) ок, пока тогда брошу, потом еще повожусь, может что придумаю. что-то сглючило, похоже, надо просто с нуля попробовать. [Ответ]
Вверх