মেমোরির একটি ব্লক মুক্ত না হয়েছিল কিনা তা সনাক্ত করার চেষ্টা করছি। অবশ্যই, পরিচালক আমাকে ডায়লগ বাক্স বা লগ ফাইলের মাধ্যমে বলছেন, তবে আমি যদি কোনও ডাটাবেজে ফলাফল সঞ্চয় করতে চাই তবে কী হবে? উদাহরণস্বরূপ আমি একটি ডাটাবেস টেবিলের মধ্যে রুটিনের একটি নাম রাখতে চাই যা প্রদত্ত ব্লকগুলিকে বরাদ্দ দিয়েছে।
ফাস্টএমএম-এর একটি ডকুমেন্টেশন পড়ার পরে আমি জানি যে সংস্করণ 4.98 সাল থেকে আমাদের মেমরির দ্বারা মেমরির বরাদ্দ, ফ্রি এবং রিলোকেশনগুলি ঘটে থাকে সে সম্পর্কে অবহিত করার সম্ভাবনা রয়েছে। উদাহরণস্বরূপ OnDebugFreeMemFinishইভেন্টটি আমাদের কাছে চলে যাচ্ছে PFullDebugBlockHeaderযার মধ্যে দরকারী তথ্য রয়েছে। একটি জিনিস PFullDebugBlockHeaderঅনুপস্থিত রয়েছে - প্রদত্ত ব্লকটি যদি অ্যাপ্লিকেশনটির মাধ্যমে মুক্তি দেয় তবে তথ্যটি।
যদি না OnDebugFreeMemFinishশুধুমাত্র না মুক্ত ব্লক জন্য বলা হয়? এটি আমি জানি না এবং এটি অনুসন্ধান করতে চাই।
সমস্যাটি হ'ল এমনকি OnDebugFreeMemFinishইভেন্টটির দিকে ঝুঁকতেও আমি ব্লকটি মুক্তি পেয়েছি কিনা তা জানতে সক্ষম হয়েছি।
এখানে একটি উদাহরণ:
program MemLeakTest;
{$APPTYPE CONSOLE}
uses
FastMM4, ExceptionLog, SysUtils;
procedure MemFreeEvent(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer);
begin
//This is executed at the end, but how should I know that this block should be freed
//by application? Unless this is executed ONLY for not freed blocks.
end;
procedure Leak;
var
MyObject: TObject;
begin
MyObject := TObject.Create;
end;
begin
OnDebugFreeMemFinish := MemFreeEvent;
Leak;
end.
আমি যা মিস করছি তা কলব্যাকের মতো:
procedure OnMemoryLeak(APointer: PFullDebugBlockHeader);
ফাস্টএমএমের উত্স ব্রাউজ করার পরে আমি দেখেছি যে একটি পদ্ধতি রয়েছে:
procedure LogMemoryLeakOrAllocatedBlock(APointer: PFullDebugBlockHeader; IsALeak: Boolean);
যা ওভাররেড করা যেতে পারে, তবে এর থেকে সহজ উপায় কি আছে?
OnDebugFreeMemFinishতাকে বলা হয় যে ব্লকটি মুক্ত হয়েছিল। কোনও OnMemoryLeakঅনুষ্ঠান নেই। এমন ঘটনা আর কখনও হতে পারে না। শাটডাউন করার পরে ফাস্টএমএম যা করে তা হ'ল নির্ধারণ করা হয় যে যে কোনও ব্লককে মুক্তি দেওয়া হয়নি তা অবশ্যই ফাঁস হওয়া উচিত। এটি এর আগে আর কোনও ফুটো সনাক্ত করতে পারে না।
AppendEventLogকিন্তু আপনার সন্দেহ হওয়া ফাস্টএমএম উত্সটি সংশোধন করা দরকার।