![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| psergio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.4.2006 Репутация: нет Всего: нет |
Подскажите как использовать модуль Memcheck для фиксирования утечек памяти....
Это сообщение отредактировал(а) psergio - 13.12.2006, 15:27 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
skyboy, зато фиксирует факт наличия утечки
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
В исходном файле проекта(Project->View Source): * в секции Uses первым модулем прописываешь Memcheck. * после begin, но перед Application.Initialize; вписываешь MemChk; В настройках проекта(Project->Options): * на закладке Linker ставишь галочку Include TD32 Debug Info * на закладке Compiler в группе Code Generation ставишь галочку Stack Frames. После этого делаешь Build Project. И запускаешь программу. После завершения работы программы в папке с exe появится файл со списком утечек. А также, Delphi начнёт генерировать Exceptions на тех строках, где "скорее всего" и произошла сама утечка. п.с. включив галочку Include TD32 Debug Info размер exe файла увеличится раз в 5(!), так что при создании финального билда Memcheck лучше отключить. |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
про модули ShareMem, FastShareMem (будем для простоты считать их одним и тем же) и Memcheck пишут что и то и другой должны быть первыми, а что первее?
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Вот что написано у них в FAQ
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
Сделал всё так как писа Bose.
При этом использую FastShareMem, но он описывается и используется в dll. При завершении программа выдаёт ошибку "Runtime error 204 at 00405729", "Runtime error 216 at 004047CE" и зацикливается на ошибке "Runtime error 216 at 00407642". При это отчётный файл выглядит так: ============================================================================================================================== MemCheck version 2.75 TOP 10 Leaks: begin Leak #0 User allocated memory (GetMem) Size: 20 1 Occurence call stack - 0 : Routine @System@@NewAnsiString Find error: 004057DD call stack - 1 : Routine @Forms@TCustomForm@DoCreate Find error: 0046D01F call stack - 2 : Routine @Forms@TCustomForm@AfterConstruction Find error: 0046CCDB call stack - 3 : Routine @Forms@TCustomForm@Create Find error: 0046CCB1 call stack - 4 : Routine @Forms@TApplication@CreateForm Find error: 0047587C call stack - 5 : (no debug info) Find error: 0053ACA2 call stack - 6 : (no debug info) Find error: 7C816D4B call stack - 7 : (no debug info) Find error: FFFFFFFC Leak #1 User allocated memory (GetMem) Size: 18 1 Occurence call stack - 0 : Routine @System@@NewAnsiString Find error: 004057DD call stack - 1 : Routine @Forms@TCustomForm@DoCreate Find error: 0046D01F call stack - 2 : Routine @Forms@TCustomForm@AfterConstruction Find error: 0046CCDB call stack - 3 : Routine @Forms@TCustomForm@Create Find error: 0046CCB1 call stack - 4 : Routine @Forms@TApplication@CreateForm Find error: 0047587C call stack - 5 : (no debug info) Find error: 0053ACA2 call stack - 6 : (no debug info) Find error: 7C816D4B call stack - 7 : (no debug info) Find error: FFFFFFFC Leak #2 User allocated memory (GetMem) Size: 16 1 Occurence call stack - 0 : (no debug info) Find error: 0000083C TOP 10 Leaks: end Total leak: 54 bytes *** MEMCHK: Blocks STILL allocated *** Leak #0 User allocated memory (GetMem) Size: 20 1 Occurence call stack - 0 : Routine @System@@NewAnsiString Find error: 004057DD call stack - 1 : Routine @Forms@TCustomForm@DoCreate Find error: 0046D01F call stack - 2 : Routine @Forms@TCustomForm@AfterConstruction Find error: 0046CCDB call stack - 3 : Routine @Forms@TCustomForm@Create Find error: 0046CCB1 call stack - 4 : Routine @Forms@TApplication@CreateForm Find error: 0047587C call stack - 5 : (no debug info) Find error: 0053ACA2 call stack - 6 : (no debug info) Find error: 7C816D4B call stack - 7 : (no debug info) Find error: FFFFFFFC Leak #1 User allocated memory (GetMem) Size: 18 1 Occurence call stack - 0 : Routine @System@@NewAnsiString Find error: 004057DD call stack - 1 : Routine @Forms@TCustomForm@DoCreate Find error: 0046D01F call stack - 2 : Routine @Forms@TCustomForm@AfterConstruction Find error: 0046CCDB call stack - 3 : Routine @Forms@TCustomForm@Create Find error: 0046CCB1 call stack - 4 : Routine @Forms@TApplication@CreateForm Find error: 0047587C call stack - 5 : (no debug info) Find error: 0053ACA2 call stack - 6 : (no debug info) Find error: 7C816D4B call stack - 7 : (no debug info) Find error: FFFFFFFC Leak #2 User allocated memory (GetMem) Size: 16 1 Occurence call stack - 0 : (no debug info) Find error: 0000083C *** MEMCHK: End of allocated blocks *** *** MEMCHK: Chronological leak information *** * User allocated memory (GetMem) (Leak #2) Size: 16 * User allocated memory (GetMem) (Leak #1) Size: 18 * User allocated memory (GetMem) (Leak #0) Size: 20 *** MEMCHK: End of chronological leak information *** *** MEMCHK: Blocks written to after destruction *** Bad blocks count: 0 *** MEMCHK: End of blocks written to after destruction *** ============================================================================================================================== Что теперь это значит? --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Это значит что у тебя не освобождается что-то, что выделяется в событии OnFormCreate. Причем дважды(Leak #0 и Leak #1).
В конце работы MemCheck специально генерирует Exceptionы, в тех местах где выделяется память которая потом не освобождается . Кстати memcheck несовместим с FastMM. По крайней мере, мне не удалось заставить их нормально работать в паре. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Получается что в Delphi 2007 уже нельзя его юзать... -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Я недолго изучал эту проблему. В принципе, FastMM умеет отслеживать утечки памяти, и лог пишёт намного более подробный(настолько подробный, что я с ним так и не разобрался толком). Единственное, что более приятно при использовании memcheck - это генерация exception-ов прямо в тех местах кода, где была выделена неосвобождённая память. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
В Delphi 2007 FastMM поставляется в урезанном виде.
Для полной отладки нужно скачать с оффсайта и в инклудах активировать нужные опции. |
|||
|
||||
| ilya198293 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 17.3.2007 Где: Сириус, созвездие Большого Пса Репутация: нет Всего: нет |
А что должно произойти если утечек памяти нет?
Я просто создал новый проект и сделал
при закрытии пустой формы пишет вот такое: ========================================================== MemCheck version 2.75 TOP 10 Leaks: begin Leak #0 User allocated memory (GetMem) Size: 16 1 Occurence call stack - 0 : (no debug info) Find error: 0000FFFF TOP 10 Leaks: end Total leak: 16 bytes *** MEMCHK: Blocks STILL allocated *** Leak #0 User allocated memory (GetMem) Size: 16 1 Occurence call stack - 0 : (no debug info) Find error: 0000FFFF *** MEMCHK: End of allocated blocks *** *** MEMCHK: Chronological leak information *** * User allocated memory (GetMem) (Leak #0) Size: 16 *** MEMCHK: End of chronological leak information *** *** MEMCHK: Blocks written to after destruction *** Bad blocks count: 0 *** MEMCHK: End of blocks written to after destruction *** ========================================================== и начали сыпаться ошибки с текстом Runtime error 217 at 0040DDB6. Что это вообще значит и может есть где небольшой мануальчик по работе с MemCheck? --------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |