PDA

View Full Version : Memory Leak ??



sasan_vm
پنج شنبه 17 اردیبهشت 1388, 16:45 عصر
سلام

یک پروژه دارم که متوجه Memory Leak در آن شدم حالا هرچی میگردم کمتر به نتیجه میرسم. از EurekaLog-6 هم استفاده کردم به نظرم با BCB 2007 مشکل داره ، رو ساده ترین
پروژه هم جواب نداد!!.

اساتید محترم راهنمائی یا ابزاری برای کمک می توانند معرفی کنند.

مشخصات پروژه:
- win32 native application
- compilers: BCB 2007/VC++ 2005
- platform winxp sp2

متشکرم.

vcldeveloper
پنج شنبه 17 اردیبهشت 1388, 17:28 عصر
دقیقا چی رو میخواید متوجه بشید؟ نوع داده ایی که نشت میکنه؟
می تونید از FastMM استفاده کنید. BCB 2007 هم باید بطور پیش فرض از FastMM به عنوان مدیر حافظه استفاده کنه. FastMM سوئیچی برای نمایش Memory Leak در پایان کار برنامه داره. توی دلفی میشه از طریق متغیر سراسری ReportMemoryLeaks این قابلیت را فعال کرد.
اگر میخواید از ابزارهای جانبی استفاده کنید، AQTime امکان مانیتور کردن میزان حافظه مصرف بطور Live را داره، در انتهای کارش هم لیست اشیاء نشت کرده را گزارش میکنه.
MemCheck هم ابزار رایگانی برای دلفی هست برای پیدا کردن نشت حافظه. باید با BCB هم کار کنه.

sasan_vm
پنج شنبه 17 اردیبهشت 1388, 18:54 عصر
سلام

جناب کشاورز، من CodeGuard را فعال کردم گزارش تعداد فراخوانی function ها نشون میده که چند نشت حافظه وجود داره ولی پیدا کردنش بین کلی source برنامه مشکل هست.



Functions called:
sin (399 times)
cos (399 times)
delete[] (4919 times)
delete (109 times)
vsnprintf (630 times)
new[] (4927 times)
memset (157 times)
realloc (67 times)
memcpy (4632 times)
free (33 times)
new (110 times)
calloc (10 times)
malloc (22 times)
Resource types used:
object array (4927 allocs, 1 max)
object (110 allocs, 96 max)
memory block (66 allocs, 28 max)


نتیجه:


new[] (4927 times)
delete[] (4919 times) - [8 different]
new (110 times)
delete (109 times) - [1 different]
free (33 times)
calloc (10 times)
malloc (22 times) - [1 times free more - ;) nice]

vcldeveloper
پنج شنبه 17 اردیبهشت 1388, 19:24 عصر
با اون ابزارهایی که گفتم، نهایتش بتونید نوع اشیا و منابعی که نشت کردند را پیدا کنید. اگر اون نوع ها فقط در بخش های خاصی از کدتان استفاده شده باشند، میشه راحت آن را پیدا کرد، وگرنه پیدا کردنشان سخت میشه.

البته AQTime چون بصورت Live میزان مصرف منابع را گزارش میده، میتونه بیشتر بهتون کمک کنه، چون می تونید در طول اجرای برنامه، از روی نموداری که نمایش میده، ببینید بعد از انجام چه کارهایی در برنامه، منابع استفاده شده کاهش پیدا نمی کنند.