| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Использование MemCheck |
| Автор: psergio 13.12.2006, 15:26 |
| Подскажите как использовать модуль Memcheck для фиксирования утечек памяти.... |
| Автор: skyboy 13.12.2006, 16:52 |
| бросаешь его первым в список используемых модулей. вроде, все. там в архиве readme лежит - что, не нашел? Добавлено @ 16:53 он не исправляет утечки. он их только обнаруживает. |
| Автор: Alexeis 13.12.2006, 17:41 |
| skyboy, зато фиксирует факт наличия утечки |
| Автор: ilya198293 24.6.2007, 12:02 |
| про модули ShareMem, FastShareMem (будем для простоты считать их одним и тем же) и Memcheck пишут что и то и другой должны быть первыми, а что первее? |
| Автор: Alexeis 24.6.2007, 12:12 | ||
Вот что написано у них в FAQ
|
| Автор: ilya198293 24.6.2007, 13:00 |
| Сделал всё так как писа 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 25.6.2007, 13:37 | ||
Это значит что у тебя не освобождается что-то, что выделяется в событии OnFormCreate. Причем дважды(Leak #0 и Leak #1).
В конце работы MemCheck специально генерирует Exceptionы, в тех местах где выделяется память которая потом не освобождается . Кстати memcheck несовместим с FastMM. По крайней мере, мне не удалось заставить их нормально работать в паре. |
| Автор: Alexeis 25.6.2007, 13:43 | ||
Получается что в Delphi 2007 уже нельзя его юзать... |
| Автор: Bose 26.6.2007, 00:49 | ||
Я недолго изучал эту проблему. В принципе, FastMM умеет отслеживать утечки памяти, и лог пишёт намного более подробный(настолько подробный, что я с ним так и не разобрался толком). Единственное, что более приятно при использовании memcheck - это генерация exception-ов прямо в тех местах кода, где была выделена неосвобождённая память. |
| Автор: Snowy 26.6.2007, 00:54 |
| В Delphi 2007 FastMM поставляется в урезанном виде. Для полной отладки нужно скачать с оффсайта и в инклудах активировать нужные опции. |
| Автор: ilya198293 28.9.2007, 06:47 | ||
| А что должно произойти если утечек памяти нет? Я просто создал новый проект и сделал
при закрытии пустой формы пишет вот такое: ========================================================== 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? |