Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование MemCheck, Как пользоваться? 
:(
    Опции темы
psergio
  Дата 13.12.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.4.2006

Репутация: нет
Всего: нет



Подскажите как использовать модуль Memcheck для фиксирования утечек памяти....

Это сообщение отредактировал(а) psergio - 13.12.2006, 15:27
PM MAIL   Вверх
skyboy
Дата 13.12.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



бросаешь его первым в список используемых модулей. вроде, все. там в архиве readme лежит - что, не нашел?

Добавлено @ 16:53 
Цитата(psergio @  13.12.2006,  14:26 Найти цитируемый пост)
фиксирования утечек памяти

он не исправляет утечки. он их только обнаруживает.
PM MAIL   Вверх
Alexeis
Дата 13.12.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



skyboy, зато фиксирует факт наличия утечки   smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bose
Дата 14.12.2006, 19:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(psergio @  13.12.2006,  15:26 Найти цитируемый пост)
Подскажите как использовать модуль Memcheck для фиксирования утечек памяти....

В исходном файле проекта(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 лучше отключить.


PM MAIL WWW Skype   Вверх
ilya198293
Дата 24.6.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



про модули ShareMem, FastShareMem (будем для простоты считать их одним и тем же) и Memcheck пишут что и то и другой должны быть первыми, а что первее?
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
Alexeis
Дата 24.6.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Вот что написано у них в FAQ
Цитата

Q8: Is there a problem with ShareMem ?

A: Yes. As far as I know, if your project uses ShareMem and you launch MemCheck, the program will fail with an invalid pointer operation error on termination. I don't know where this problem comes from. The error seems to occur when the FreeMem of the memory manager of ShareMem is called on program termination. However I don't understand what happens since the ShareMem unit does not have a finalization section. Any hint will be very welcome ! I think this prevents the use of MemCheck when writing a DLL.

Here is what David Fielder answers for this question:
I am using Memcheck alongside ShareMem just fine. I just make sure ShareMem is first, and Memcheck is second in the uses clause. ShareMem calls statically loads DelphiMM.dll, and frees the dll when the program terminates. So the error you get will be caused by DelphiMM.dll attempting to tidy up before being freed.

Hint ! Use FastSharemem (see Q16).



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ilya198293
Дата 24.6.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 ***
==============================================================================================================================
Что теперь это значит?

--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
Bose
Дата 25.6.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Это значит что у тебя не освобождается что-то, что выделяется в событии OnFormCreate. Причем дважды(Leak #0 и Leak #1).  
Цитата(ilya198293 @  24.6.2007,  13:00 Найти цитируемый пост)
При завершении программа выдаёт ошибку "Runtime error 204 at 00405729"

В конце работы MemCheck специально генерирует Exceptionы, в тех местах где выделяется память которая потом не освобождается . 


Кстати memcheck несовместим с FastMM. По крайней мере, мне не удалось заставить их нормально работать в паре. 
PM MAIL WWW Skype   Вверх
Alexeis
Дата 25.6.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Bose @  25.6.2007,  13:37 Найти цитируемый пост)
Кстати memcheck несовместим с FastMM. По крайней мере, мне не удалось заставить их нормально работать в паре.  

  Получается что в Delphi 2007 уже нельзя его юзать...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bose
Дата 26.6.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(Bose @  25.6.2007,  13:37 Найти цитируемый пост)
Кстати memcheck несовместим с FastMM. По крайней мере, мне не удалось заставить их нормально работать в паре. 


Цитата(Alexeis @  25.6.2007,  13:43 Найти цитируемый пост)
Получается что в Delphi 2007 уже нельзя его юзать...


Я недолго изучал эту проблему. 

В принципе, FastMM умеет отслеживать утечки памяти, и лог пишёт намного более подробный(настолько подробный, что я с ним так и не разобрался толком). Единственное, что более приятно при использовании memcheck - это генерация exception-ов прямо в тех местах кода, где была выделена неосвобождённая память. 
PM MAIL WWW Skype   Вверх
Snowy
Дата 26.6.2007, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В Delphi 2007 FastMM поставляется в урезанном виде.
Для полной отладки нужно скачать с оффсайта и в инклудах активировать нужные опции.
PM MAIL   Вверх
ilya198293
Дата 28.9.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



А что должно произойти если утечек памяти нет?
Я просто создал новый проект и сделал
Цитата

В исходном файле проекта(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 лучше отключить.

при закрытии пустой формы пишет вот такое:
==========================================================
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?
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.