Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Вниз
Есть средства анализа объектов программы? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c