Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Есть средства анализа объектов программы?   Найти похожие ветки 

 
Aleksandr ©   (2004-03-04 12:42) [0]

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


 
Amoeba ©   (2004-03-04 12:49) [1]

Скачай и поставь MemProof (мощная и бесплатная утилита для Delphi/Builder) - адрес легко найдешь поисковиком.


 
YuRock ©   (2004-03-04 12:49) [2]

Нате, вот, пользуйтесь... После первого Begin"a в файле проекта напишите SetNewMemMgr, а затем можно будет пользоваться ф-цией DumpMemory в любом месте программы.


unit Memory;

interface

var
 GetMemCount: Integer;
 FreeMemCount: Integer;
 ReallocMemCount: Integer;

procedure SetNewMemMgr;
procedure DumpMemory(strInfo: string);

implementation

uses SysUtils;

var
 OldMemMgr: TMemoryManager;

function NewGetMem(Size: Integer): Pointer;
begin
 Inc(GetMemCount);
 Result := OldMemMgr.GetMem(Size);
end;

function NewFreeMem(P: Pointer): Integer;
begin
 Inc(FreeMemCount);
 Result := OldMemMgr.FreeMem(P);
end;

function NewReallocMem(P: Pointer; Size: Integer): Pointer;
begin
 Inc(ReallocMemCount);
 Result := OldMemMgr.ReallocMem(P, Size);
end;

const
 NewMemMgr: TMemoryManager = (
 GetMem: NewGetMem;
 FreeMem: NewFreeMem;
 ReallocMem: NewReallocMem);

procedure SetNewMemMgr;
begin
 GetMemCount := 0;
 FreeMemCount := 0;
 ReallocMemCount := 0;

 GetMemoryManager(OldMemMgr);
 SetMemoryManager(NewMemMgr);
end;

procedure DumpMemory(strInfo: string);
var
 f: TextFile;
begin
 AssignFile(f, "C:\Memory.txt");

 if FileExists("C:\Memory.txt") then
   Append(f)
 else
   Rewrite(f);

 WriteLn(f, Format("[%s]  %8d %8d %8d", [strInfo, GetMemCount, FreeMemCount, GetMemCount - FreeMemCount]));
 CloseFile(f);
end;

end.


© Borland + Я + alexEagle


 
Amoeba ©   (2004-03-04 12:51) [3]

MemProof покажет тебе в исходном коде все места утечек.

http://www.automatedqa.com/downloads/memproof.asp


 
Aleksandr ©   (2004-03-04 12:55) [4]

Огромное спасибо!


 
Aleksandr ©   (2004-03-04 13:30) [5]

Млин, еще бы понять, как его в Делфи встроить... хелпа чего-то они решили не поставлять...


 
Вася Пупкин ©   (2004-03-04 14:15) [6]

Aleksandr ©   (04.03.04 13:30) [5] help есть в версии 9.36
MemProof (Build 0.936 May 2, 2000)


 
Aleksandr ©   (2004-03-04 14:32) [7]

Ага, сделал... Поставил 9.36, переписал туда последнюю - но в просмотре у меня один хрен ничего не показывает. Запускаю программу из него, показывает всякие количества, а при двойном щелчке на них - пустое окно.


 
Aleksandr ©   (2004-03-04 17:14) [8]

Ну объясните мне, где он там показывает неосвобожденную память и когда?! :(

2 YuRock: Кстати, я пробовал сначала Ваш вариант - он сразу при инициализации дает runtime error.


 
YuRock ©   (2004-03-04 17:24) [9]

> Aleksandr ©   (04.03.04 17:14) [8]

Не может быть. У меня работает. Как и где Вы инициализируете? Падает на SetNewMemMgr? Покажите код инициализации.

Единственное, что может быть - под D7 это может не работать - не проверял. Но это очень маловероятно.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
6-1074061607
Клювокрылый
2004-01-14 09:26
2004.03.28
php сервер


11-1056813188
Dimaxx
2003-06-28 19:13
2004.03.28
Про нажатия клавиш


6-1074172801
FOIL
2004-01-15 16:20
2004.03.28
Все процессы на удалённой машине


1-1079015022
Надя
2004-03-11 17:23
2004.03.28
графы


8-1069288172
iNT24h
2003-11-20 03:29
2004.03.28
Plugin for Winamp 2x