.
LMDBG برنامه ای که اجازه می دهد تا تشخیص حافظه leaksand رهایی دو و nbsp است؛ با این حال، بر خلاف دیگران، LMDBG تولید * * * * * * * * FULL stacktracesand جدا ورود به سیستم از تجزیه و تحلیل thusallowing به تجزیه و تحلیل برنامه بر اساس هر ماژول.
- lmdbg اجرا ابزار lmdbg اصلی است. این اجرا می شود یک برنامه و ایجاد یک فایل ورود به سیستم (یا FIFO) که در آن همه به نام malloc / calloc / بازتخصیص / آزاد / memalign / فراخوانی posix_memalign با ورودی خود را ثبت (بایت تعداد دفعات مشاهده، اشاره گر)، خروجی (اشاره گر) و (! یونیک ویژگی !!!) FULL STACKTRACE (اشاره گر).
به عنوان مثال:
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون $ گربه / test2.c
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ # شامل
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ اعضای هیات تحریریه اصلی ()
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ {
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ از درجه اعتبار ساقط * P1 = NULL؛
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ از درجه اعتبار ساقط * P2 = NULL؛
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ P1 = malloc (555)
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ P2 = بازتخصیص (P2، 666).
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ P2 = بازتخصیص (P2، 777).
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ P2 = بازتخصیص (P2، 888).
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ بازگشت 0؛
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ }
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ شورای همکاری خلیج فارس -O0 -G -o _test2 آزمون / test2.c
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ lmdbg اجرا -o _log ./_test2
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ _log گربه
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ malloc (555) -> 0xbb901400
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5b03
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048738
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (NULL، 666) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804874e
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901800، 777) -> 0xbb901c00
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048764
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901c00، 888) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804877a
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $
توجه: stacktrace کامل اجازه می دهد تا شما را به تجزیه و تحلیل برنامه خود را، یعنی شما می توانید تشخیص آنچه بلوک / قطعات نیاز به حافظه بیشتری نسبت به دیگران و به همین دلیل. lmdbg-SYM یک ابزار بسیار مهم برای این است، پایین را ببینید.
- lmdbg-نشت تجزیه و تحلیل یک فایل ورود به سیستم تولید شده توسط lmdbg-اجرا و خروجی تمام نشت حافظه یافت
به عنوان مثال:
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ lmdbg-نشت _log و nbsp؛ & nbsp؛ در
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901c00، 888) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804877a
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ malloc (555) -> 0xbb901400
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5b03
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048738
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $
- lmdbg-SYM آدرس تبدیل به source.c: 999 اگر این امکان وجود دارد
به عنوان مثال (GDB (1) است را در عمل):
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ lmdbg-SYM ./_test2 _log
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ malloc (555) -> 0xbb901400
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5b03
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048738 و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 8 اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (NULL، 666) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804874e و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 9 اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901800، 777) -> 0xbb901c00
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048764 و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 10 & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901c00، 888) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804877a و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 11 & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $
به عنوان مثال (addr2line (1) کار می کند در اینجا):
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ lmdbg-SYM -a ./_test2 _log
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ malloc (555) -> 0xbb901400
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5b03
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048738 و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (NULL، 666) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804874e و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 9
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901800، 777) -> 0xbb901c00
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048764 و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 10
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901c00، 888) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804877a و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 11
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $
- lmdbg-sysleaks - نشت greps و یا سیستم پرش حافظه در libc، libdl، C ++ STL و غیره مشاهده آزمون / lmdbg * .conf فایل های یافت. فایل به طور پیش فرض پیکربندی هستند: ~ / .lmdbg.conf و /etc/lmdbg.conf
- lmdbg = lmdbg-اجرا + lmdbg-نشت + lmdbg-SYM + lmdbg-sysleaks
این است که lmdbg همه در یک ابزار در سطح بالاتر است.
به عنوان مثال:
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ lmdbg -v -o _log ./_test2
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ نشت حافظه به فایل شناسایی و ذخیره شد '_log'
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $ _log گربه
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ بازتخصیص (0xbb901c00، 888) -> 0xbb901800
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5a37
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x804877a و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 11 & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ malloc (555) -> 0xbb901400
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe58e8
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0xbbbe5b03
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048738 و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ آزمون / test2.c: 8 اصلی
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x8048584
و nbsp؛ & nbsp؛ از & nbsp؛ از & nbsp؛ در و nbsp؛ 0x80484e7
و nbsp؛ & nbsp؛ از & nbsp؛ در و nbsp؛ $
چه در این نسخه جدید است:
در lmdbg-SYM دیگر segfaults به دلیل مشکلات با stacktrace (3).
روش تبدیل آدرس بسیار ساده تر و صحیح اضافه شد.
بودند speedups قابل توجهی با توجه به بهینه سازی برای GDB وجود دارد.
در lmdbg اجرا، قلاب malloc از glibc دیگر استفاده می شود.
کد خود lmdbg است در stacktraces گنجانده نشده است.
گزینه -N جدید، اضافه شده و گزینه -v دریافت ثابت جزئی.
lmdbg-آمار رفع برای ارجاع NULL که به نظر می رسد اگر یک (3) و یا بازتخصیص (3) stacktrace رایگان بدون malloc / بازتخصیص مناسب (3) stacktrace بود دریافت کرد.
بود دیگر اصلاحات جزیی و بهبود، بهبود در آزمون رگرسیون، و بهبود در stacktrace (3) وجود دارد.
چه جدید در نسخه 1.1.0 است:
یک ثابت در آزمون رگرسیون.
lmdbg اجرا: صفر آدرس از stacktraces تولید شده توسط backtrace از glibc (3) حذف شده است.
این رفع ادعا در lmdbg-آمار (1).
دو & quot؛ را 0x ها & quot؛ مسائل در & quot؛ را بخش اطلاعات و & quot؛ ثابت شد (دیده می شود در نتبیاسدی).
backtrace (3) از libexecinfo (در صورت موجود بودن) است به جای استفاده از ساخته شده است در اجرای استفاده می شود.
lmdbg-SYM: چند باگ در تبدیل آدرس به علامت ثابت شد.
lmdbg-آمار: ناقص خطوط خوانده شده در حال حاضر نادیده گرفته، به طوری که هیچ بیشتر وجود دارد ادعا (3) هنگامی که یک برنامه در حال دیباگ کشته است.
اجرای جایگزین نوشته شده در AWK برداشته شد.
جدید در نسخه 0.17.0 است:
در این نسخه می افزاید: بسیاری از پیشرفت ها و رفع در صفحات کتابچه راهنمای کاربر، قابلیت های جدید در lmdbg، lmdbg-اجرا و lmdbg-SYM، و اصلاحات جزیی به lmdbg-آمار.
lmdbg در حال حاضر یک ابزار متا است که قادر به انجام کارهای بسیاری را بیشتر، و نه فقط نشت حافظه پیدا کنید.
جدید در نسخه 0.15.1 است:
به ثبت calloc (3) فراخوانی است در سیستم های مبتنی بر از glibc (لینوکس، گنو / kFreeBSD، و شاید دیگران) به دلیل غیر فعال lmdbg -run در آنها با شکست مواجه.
جزئی تمیزکاری، رفع، و بهبود. MK-پیکربندی & gt؛ به ساختن = 0.20 مورد نیاز است.
جدید در نسخه 0.14.0 است:
ابزار جدید: lmdbg-آمار، lmdbg-های grep و lmdbg-مرتب سازی بر برای جمع آوری و تجزیه و تحلیل اطلاعات آماری در مورد تخصیص حافظه.
lmdbg اجرا: گزینه های جدید برای lmdbg اجرا: -S و متر برای تولید stacktraces کوتاه.
lmdbg-SYM: -p گزینه جدید برای به دست آوردن نام برنامه از خروجی lmdbg اجرا است.
تعمیر: 'آزمون mkcmake' حذف فایل های موقت آن است.
نظر یافت نشد