Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1069406674
Летящий
2003-11-21 12:24
2004.03.28
Позиционирование Image в ImageList


3-1077861338
Yad
2004-02-27 08:55
2004.03.28
Системное время сервера


1-1078779326
Гиричев Руслан
2004-03-08 23:55
2004.03.28
Знает ли кто-нить AdvMemo?


6-1073764706
Delphi5.01
2004-01-10 22:58
2004.03.28
IdHTTP.Post ...


11-1056772152
Vladimir Kladov
2003-06-28 07:49
2004.03.28
Версия 1.78





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский