Главная страница
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
3-1077188241
Alexei Sviridov
2004-02-19 13:57
2004.03.28
SQL Scripts


14-1077716918
Mike B.
2004-02-25 16:48
2004.03.28
Сабж :)


3-1076750968
BOR
2004-02-14 12:29
2004.03.28
Нужен модуль, заменяющий BDE !


14-1077018515
wHammer
2004-02-17 14:48
2004.03.28
Где лучше хранить пароли пользователей для доступа к программе?


7-1072386980
~GaMeRd~
2003-12-26 00:16
2004.03.28
Drag&Drop