Главная страница
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.043 c
1-1078422987
MAXH0
2004-03-04 20:56
2004.03.28
System tray


1-1078499619
raul
2004-03-05 18:13
2004.03.28
создание контекстной справки


3-1076937543
Jony
2004-02-16 16:19
2004.03.28
Кнопка ebsUpDownEh в DBEditEh


8-1068627723
claus
2003-11-12 12:02
2004.03.28
рисование линий на Canvas-e любой формы, задаваемые шаблоном


1-1078490679
Julliete
2004-03-05 15:44
2004.03.28
Как использовать Enter вместо Tab при переходе