Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
RAD Studio и утечки памяти |
Философия, технологии, алгоритмы! |
|
Опции темы |
20.07.2014, 16:13 | #1 |
Форумец
Сообщений: 39,861
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
RAD Studio и утечки памяти
В общем, дело такое. В относительно свежей редакции RAD Studio обнаружился крайне неприятный глюк.
Создаем стандартный Win32 проект, пусть будет обычный гуёвый, в FormShow или по кнопке, не важно, главное чтобы код сработал после запуска, выделяем с помощью обычного оператора new область памяти, произвольного объема. Теперь пробуем программу завершить, штатным образом, по "крестику", кнопке выхода, через меню, не важно. и... падаем. где то в дебрях VCL. RAD Studio - это, кто вдруг не в курсе, последнее название прожекта ранее известного как С++ Builder / Delphi. Собственно вопрос основной: как с этим жить? Первое что пришло в голову - сторонний детектор утечек памяти, что в любом случае вещь полезная. Кто какой может посоветовать проверенный на собственной шкуре, и именно в контексте хорошей интеграции с актуальной версией RAD Studio? Которая очень актуально не дает закрыться корректно программе из-за банально забытого освобождения памяти. Если кто знает другое грамотное решение довольно пикантной ситуации - с благодарностью выслушаю. Вариант писать программы как истинный самурай, без единой ошибки, безусловно интересен, но не очень... так что прошу не предлагать))) Интересно услышать того кто на практике с этим сталкивался и какое то грамотное решение, быть может в настройках? нашел и готов безвозмездно поделиться с общественностью, как минимум в моем лице. Версия RAD Studio если у кого какая более менее хотя бы свежая есть, где подобное не наблюдается, тоже с интересом бы узнал номер билда / апдейта / патча. А то как то грустно слишком, вроде бы софтинка стала заметно приятнее в общении, со времен когда она была билдеро-дельфей, но вот такой косяк перечеркивает все плюсы. Вообще у меня такое ощущение что это какая-то криво работающая фича, которая хочет сообщить об утечке, но вместо этого где то глючит сама... если можно штатными средствами самой студии это поправить, было бы совсем здорово если бы кто подсказал. Побочные вопросы по продуктам линейки RAD Studio если тут будут - тему переименую / переоформлю , я не против совершенно, наоборот лучше темы не плодить. |
20.07.2014, 18:26 | #2 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Spectator, Eurekalog вам в помощь. С помощью неё обнаруживал утечки в приложениях написанных в CodeGear.
Но у меня есть подозрение, что может глючит какой-то компонент, который ставиться для "прокачки" самой IDE. Непонятно и ещё одно, какая версия CodeGEar используется и что будет, если просто собрать проект и запустить его отдельно от IDE. Продукт который я описал выше - позволяет интегироваться в приложение, и в дальнейшем даёт возможность получать отчёт о работы программы. Вроде как даже триалка у него есть. Но можно найти и .... вообщем если что - пиши в личку, кину ссылку. ХОтя найти особого труда не составляет |
20.07.2014, 19:12 | #3 | |
Форумец
Сообщений: 39,861
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
уже смотрю. с покупкой лицензионной версии я, думаю, справлюсь как нибудь самостоятельно))) триалку уже поставил, сегодня же поковыряю. отпишусь тогда по результатам отдельно. мне да, отслеживания утечек будет вполне достаточно. сверхмощное что-то не нужно, вроде адекватный код пишу относительно)) но вот после активного использования VS в своё время, мне очень сильно не хватает конкретно этого. там всё просто - не освободил память, на выходе получил дамп, и по шее от начальника, если он в этот момент оказался рядом))) а тут столько лет прошло, и такой элементарной вещи не догадались сделать. я на днях просто пошел покурить, с запущенной программой, вернулся и TaskMan'е увидел что откушал три гига памяти. мне что то реально дурно стало, я к таким цифрам не привык еще. в таймере, 50-миллисекундном (скорость выполнения функции тестировал), в совершенно сыром проекте чуток совсем не освободил, ага. |
|
20.07.2014, 19:22 | #4 |
Мы вместе
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40
Не в сети |
Очень долгое время используем для delphi менеджер под названием FastMM http://sourceforge.net/projects/fastmm/ Очень довольны.
Вместе с оператором New(), вроде как, нужно в конце использовать оператор Dispose(), который очищает эту выделенную память. При достаточно большом разнообразии задач ни разу не пользовался этими операторами. Для работы с произвольными данными, которые нужно хранить в памяти, читать, писать, копировать, сохранять и т.д. пользуюсь классами типа TStream или TMemoryStream. |
20.07.2014, 19:45 | #5 | |
Форумец
Сообщений: 39,861
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
|
|
21.07.2014, 05:15 | #7 |
Мы вместе
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40
Не в сети |
Hopkroft, нет. Вот это сделали, сейчас развиваем и дописываем: http://ufo-game.ru/ Не сайт естественно, а игру
|
23.07.2014, 15:28 | #9 |
Форумец
Сообщений: 39,861
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
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 я не могу так просто, поскольку его нет в палитре компонент. Не было у вас такой хрени? |
23.07.2014, 16:21 | #10 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Spectator, ну у меня работам с этим продуктом заключалась в проставлении галки Активировать Eurekalab(В настройках проекта). Потом протыкал галки, что мне нужно искать. Очень немаловажный момент в том, что настройки самой IDE влияют на те ошибки, которые будет отлавливать EurekaLab.
После этого собирал проект, и в процессе работы, выскакивало окошко этого продукта, где было сказано в каком месте у меня утечка или другая бяка. До исползования компонентом как-то руки не дошли, да и полученной информации мне оказалось достаточно. Последний раз редактировалось Hopkroft; 23.07.2014 в 16:33. Причина: уточнение конфигурации |
23.07.2014, 16:37 | #11 |
Форумец
Сообщений: 39,861
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Hopkroft, ну я понял, установкой конкретной компоненты обычно один человек в конторе и заведует, я понимаю) ок, пока тогда брошу, потом еще повожусь, может что придумаю. что-то сглючило, похоже, надо просто с нуля попробовать.
|