LMDBG เป็นโปรแกรมที่ช่วยให้การตรวจสอบหน่วยความจำ leaksand ปลดปล่อยคู่ & nbsp;. แต่แตกต่างจากคนอื่น ๆ LMDBG สร้าง * * * * * * * * FULL stacktracesand แยกการเข้าสู่ระบบจากการวิเคราะห์ thusallowing การวิเคราะห์โปรแกรมประยุกต์บนพื้นฐานต่อโมดูล
- lmdbg วิ่ง เป็นสาธารณูปโภค lmdbg หลัก มันทำงานของโปรแกรมประยุกต์และสร้างแฟ้มบันทึก (หรือ FIFO) ซึ่งทั้งหมดเรียกว่า malloc / calloc / realloc / ฟรี / memalign / สวด posix_memalign ลงทะเบียนกับใส่ของพวกเขา (ไบต์นับตัวชี้) เอาท์พุท (ตัวชี้) และ (ซ้ำ !!! คุณลักษณะ !!!) FULL Stacktrace (ชี้)
ตัวอย่าง:
& nbsp; & nbsp; & nbsp; & nbsp; $ ทดสอบแมว / test2.c
& nbsp; & nbsp; & nbsp; & nbsp; #include
& nbsp; & nbsp; & nbsp; & nbsp; int main ()
& 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 = realloc (P2, 666);
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; P2 = realloc (P2, 777);
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; P2 = realloc (P2, 888);
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; กลับ 0;
& nbsp; & nbsp; & nbsp; & nbsp; }
& nbsp; & nbsp; & nbsp; & nbsp; $ gcc -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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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; realloc (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 ไฟล์ config ไฟล์เริ่มต้นเป็น: ~ / .lmdbg.conf และ /etc/lmdbg.conf
- lmdbg = lmdbg วิ่ง + lmdbg-การรั่วไหล + lmdbg-sym + lmdbg-sysleaks
นั่นคือ lmdbg เป็นแบบ all-in-one เครื่องมือระดับที่สูงขึ้น
ตัวอย่าง:
& nbsp; & nbsp; & nbsp; & nbsp; $ lmdbg -v -o _log ./_test2
& nbsp; & nbsp; & nbsp; & nbsp; การรั่วไหลของหน่วยความจำที่ถูกตรวจพบและบันทึกเป็นไฟล์ '_log'
& nbsp; & nbsp; & nbsp; & nbsp; $ แมว _log
& nbsp; & nbsp; & nbsp; & nbsp; realloc (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 วิ่ง GLIBC ตะขอ malloc จะไม่ใช้.
- รหัสของตัวเอง lmdbg จะไม่รวมอยู่ใน stacktraces.
- ตัวเลือก -N ใหม่เพิ่มขึ้นและตัวเลือก -v ได้รับการแก้ไขเล็กน้อย.
- lmdbg ตัสที่ได้รับการแก้ไขสำหรับ dereference โมฆะที่ปรากฏถ้าฟรี (3) หรือ realloc (3) StackTrace ได้โดยไม่ต้องเหมาะสม malloc / realloc (3) StackTrace.
- มีการแก้ไขเล็กน้อยอื่น ๆ และการปรับปรุงการปรับปรุงในการทดสอบการถดถอยและการปรับปรุงใน StackTrace (3).
มีอะไรใหม่ ในรุ่น 1.1.0:.
- การแก้ไขในการทดสอบการถดถอย
- lmdbg ทำงาน: ศูนย์อยู่จะถูกลบออกจาก stacktraces สร้างขึ้นโดยการติดตามย้อนหลัง glibc ของ (3) .
- นี้แก้อ้างใน lmdbg ตัส (1).
- ดับเบิล & quot; 0x & quot; ปัญหาใน & quot; ส่วนข้อมูล & quot; ได้รับการแก้ไข (เห็นใน NetBSD).
- ติดตามย้อนหลัง (3) จาก libexecinfo (ถ้ามี) ที่ใช้แทนตัวในการดำเนินงาน.
- lmdbg-sym. ข้อบกพร่องบางได้รับการแก้ไขในการแปลงที่อยู่สัญลักษณ์
- lmdbg ตัส: ไม่สมบูรณ์อ่านบรรทัดจะถูกละเว้นในขณะนี้ดังนั้นจะไม่มีการยืนยันมากขึ้น (3) s เมื่อโปรแกรมกำลังดีบั๊กถูกฆ่าตาย .
- การดำเนินการทางเลือกที่เขียนใน awk ถูกลบ.
มีอะไรใหม่ ในรุ่น 0.17.0:
- รุ่นนี้เพิ่มมากของการปรับปรุงและแก้ไขใน หน้าเว็บที่ใช้ความสามารถใหม่ใน lmdbg, lmdbg วิ่งและ lmdbg-sym และแก้ไขเล็กน้อยเพื่อ lmdbg ตัส.
- lmdbg อยู่ในขณะนี้เป็นเครื่องมือที่เมตาซึ่งเป็นความสามารถที่จะทำสิ่งอื่น ๆ อีกมากมายไม่เพียงพบการรั่วไหลของหน่วยความจำ.
มีอะไรใหม่ ในรุ่น 0.15.1:
- เข้าสู่ระบบของ calloc (3) สวดถูกปิดใช้งานบน ระบบ glibc-based (Linux, GNU / kFreeBSD และอาจอื่น ๆ ) เพราะ lmdbg ทำงานล้มเหลวกับพวกเขา.
- ไมเนอร์สะอาดอัพการแก้ไขและปรับปรุง mk กำหนดค่า & gt;. = 0.20 เป็นสิ่งจำเป็นสำหรับการสร้าง
มีอะไรใหม่ ในรุ่น 0.14.0:
- เครื่องมือใหม่: lmdbg ตัส, lmdbg-grep และ lmdbg จัดเรียงสำหรับการรวบรวมและวิเคราะห์ข้อมูลทางสถิติเกี่ยวกับการจัดสรรหน่วยความจำ.
- lmdbg วิ่ง: ทางเลือกใหม่สำหรับ lmdbg วิ่ง. -S และ -M สำหรับการสร้าง stacktraces สั้นลง
- lmdbg-sym. p ตัวเลือกใหม่สำหรับการได้รับชื่อโปรแกรมจาก lmdbg วิ่งเอาท์พุท
- แก้ไข: 'ทดสอบ mkcmake' ลบไฟล์ชั่วคราว .
ความคิดเห็นที่ไม่พบ