ฉันกำลังมองหา Valgrind เพื่อช่วยปรับปรุงการเข้ารหัส / การดีบัก C ของฉันเมื่อฉันค้นพบว่ามันเป็นเพียงสำหรับ Linux - ฉันไม่มีความต้องการหรือความสนใจในการย้ายระบบปฏิบัติการของฉันไปยัง Linux ดังนั้นฉันสงสัยว่ามีโปรแกรมที่ดีสำหรับ Windows
ฉันกำลังมองหา Valgrind เพื่อช่วยปรับปรุงการเข้ารหัส / การดีบัก C ของฉันเมื่อฉันค้นพบว่ามันเป็นเพียงสำหรับ Linux - ฉันไม่มีความต้องการหรือความสนใจในการย้ายระบบปฏิบัติการของฉันไปยัง Linux ดังนั้นฉันสงสัยว่ามีโปรแกรมที่ดีสำหรับ Windows
คำตอบ:
เครื่องมือเชิงพาณิชย์ที่ดีกว่า:
เมื่อ jakobengblom2 ชี้ให้เห็น valgrind มีชุดเครื่องมือ ขึ้นอยู่กับว่าคุณกำลังพูดถึงเรื่องใดมีส่วนต่าง ๆ ของตัวนับ windows ฉันจะพูดถึง OSS หรือเครื่องมือฟรีที่นี่เท่านั้น
1. MemCheck:
หน่วยความจำดร. มันเป็นเครื่องมือที่ค่อนข้างใหม่ใช้งานได้ดีบน Windows 7 คุณสมบัติที่ฉันชอบคือมันจัดกลุ่มการจัดสรรการรั่วไหลของข้อมูลเดียวกันในรายงาน
http://code.google.com/p/drmemory/
ฉันยังใช้ UMDH ( http://support.microsoft.com/kb/268343 ) และพบว่าเงียบมีประโยชน์และง่ายต่อการติดตั้ง มันใช้งานได้ตั้งแต่ Win2000 ถึง Win7
AppVerifier คือต้องมี swissknife สำหรับผู้พัฒนาโค้ดเนมของ windows ตัวตรวจสอบ "หน่วยความจำ" ของมันทำงานคล้ายกัน http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2. Callgrind:
รายการโปรดของฉันคือ verysleepy ( http://www.codersnotes.com/sleepy ) มันเล็ก แต่มีประโยชน์มากและใช้งานง่าย
หากคุณต้องการคุณสมบัติเพิ่มเติม AMD CodeAnalyst ™ Performance Analyzer นั้นฟรี: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
เครื่องมือการวิเคราะห์ประสิทธิภาพของ Windows นั้นฟรีจาก Microsoft ไม่ใช่เรื่องง่ายในการใช้งาน แต่สามารถทำงานให้เสร็จได้ถ้าคุณเต็มใจที่จะใช้เวลา http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx ดาวน์โหลด: http://msdn.microsoft.com/en-us/performance / cc752957
3. เทือกเขา:
เครื่องมือฟรีที่คล้ายกัน (ไม่ตรงกันมาก) บน windows คือ:
VMMap จาก sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533
! heap คำสั่งใน windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Cachegrind:
เครื่องมือประสิทธิภาพการทำงานของ Windows ที่กล่าวมาข้างต้นมีความสามารถในการทำโปรไฟล์แคช L2 ในระดับหนึ่ง แต่ไม่ดีเท่าและใช้งานง่ายเหมือน Cachegrind
5. DRD:
ยังไม่พบสิ่งใดที่ฟรีและทรงพลังบน Windows แต่เครื่องมือฟรีเพียงตัวเดียวสำหรับ windows ที่ฉันพบว่าปิดเล็กน้อยคือตัวตรวจสอบ "ล็อค" ใน AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
ทำไมไม่ใช้ Valgrind + Wine เพื่อดีบักแอป Windows ของคุณ ดู http://wiki.winehq.org/Wine_and_Valgrind
(Chromium ใช้สิ่งนี้เพื่อตรวจสอบข้อผิดพลาดของหน่วยความจำเวอร์ชัน Windows ดู build.chromium.org และดูน้ำตกการทดลองหรือหน่วยความจำและค้นหาไวน์)
นอกจากนี้ยังมีหน่วยความจำของดร. ดู dynamorio.org/drmemory.html
สำหรับ Visual C ++ ลองตรวจจับการรั่วไหลของ Visual เมื่อฉันใช้มันจะตรวจพบการรั่วไหลของหน่วยความจำจากการnew
โทรและส่งคืนสายจริงในซอร์สโค้ดของการรั่วไหล รุ่นล่าสุดสามารถพบได้ที่http://vld.codeplex.com/
สภาพแวดล้อมการพัฒนาสำหรับ Windows ที่คุณใช้อาจมีเครื่องมือของตัวเอง ตัวอย่างเช่น Visual Studio ให้คุณตรวจจับและแยกการรั่วไหลของหน่วยความจำในโปรแกรมของคุณ
ฉันต้องการแสดงรายการเครื่องมือบางอย่างหวังว่าจะเป็นประโยชน์
อ่านบทความนี้เพื่อดูรายละเอียดเพิ่มเติม
ลองDUMA
มีส่วน Pageheap.exe ของเครื่องมือตรวจแก้จุดบกพร่องสำหรับ Windows ได้ฟรีและเป็นตัวจัดสรรหน่วยความจำที่กำหนดเอง / deallocator
gflags
+ gdb
(จาก mingw) มีประโยชน์ในการวินิจฉัย
เมื่อใช้ร่วมกับ Visual Studio ฉันมักใช้Visual Leak Detectorหรือเพียงแค่ _CrtDumpMemoryLeaks () ซึ่งเป็นการเรียก win32 api ทั้งคู่ไม่มีอะไรแฟนซี แต่ทำให้งานเสร็จ
ฉันเคยมีโอกาสใช้Compuware DevPartner Studioในอดีตและมันดีจริงๆ แต่ก็ค่อนข้างแพง ทางออกที่ถูกกว่าอาจเป็นGlowCodeฉันเพิ่งทำงานกับรุ่น 5.x และแม้จะมีปัญหาบางอย่างในการแนบกับกระบวนการที่ฉันต้องการในการแก้ไขข้อบกพร่องมันทำงานได้ค่อนข้างดี
ฉันชอบMemory Validatorจาก บริษัท หนึ่งชื่อ Software Verification
Viusual Studio สามารถช่วยตรวจจับการรั่วไหลของหน่วยความจำได้ ดูเคล็ดลับและเทคนิค Microsoft Visual C ++ -> "Memory Leaks" ดูโพสต์นี้ใน SO
แม้ว่าการติดตามจริงจะทำได้เฉพาะกับ Team Edtion ของ Visual Studio
ดูลิงค์ " เครื่องมือทดสอบแหล่งที่มา " ในหน้าแหล่งข้อมูลเครื่องมือทดสอบและทดสอบเครื่องมือซอฟต์แวร์สำหรับรายการเครื่องมือที่คล้ายกัน
ฉันเคยใช้ BoundsChecker, DevPartner Studio และ Intel V-Tune ในอดีตสำหรับการทำโปรไฟล์ ฉันชอบ V-Tune ที่ดีที่สุด; คุณสามารถจำลองชิปเซ็ตของ Intel ได้หลากหลายและจะให้คำแนะนำเกี่ยวกับวิธีการปรับแต่งสำหรับแพลตฟอร์มนั้น
ไม่หน่วยความจำรั่วตรวจจับเช็น Kalmbach ของมีสิทธิ์?
PS: URL เป็นเวอร์ชันล่าสุดจะถูกฝังไว้ที่ใดที่หนึ่งในชุดความคิดเห็นของบทความ
LeakDiag, UMDH, ตัวตรวจสอบแอพ, DebugDiag เป็นเครื่องมือที่มีประโยชน์ทั้งหมดในการปรับปรุงความทนทานของรหัสและค้นหาการรั่วไหลของหน่วยความจำ
ไลบรารี Boost Test สามารถตรวจหารอยรั่วของหน่วยความจำ
วิธีการเกี่ยวกับการทำให้บริสุทธิ์หรือไม่
ลองใช้ผลิตภัณฑ์ Inspector XE ของ Intel ซึ่งสามารถช่วยคุณตรวจสอบปัญหาหน่วยความจำและเธรด: http://software.intel.com/en-us/articles/intel-inspector-xe/
บางที CodeSnitch อาจเป็นสิ่งที่คุณต้องการ? http://www.entrek.com/codesnitch.html
หากคุณกำลังพัฒนาด้วย Borland / CodeGear / Embarcadero C ++ Builder คุณสามารถใช้ CodeGuard
Profilers มากหรือน้อยรวมถึงการตรวจสอบการรั่วไหลของหน่วยความจำและแสดงสแต็กเมื่อหน่วยความจำถูกจัดสรร
ฉันสามารถขอแนะนำIntels ขนานสารวัตร ใช้งานง่ายและไม่ต้องคอมไพล์ซ้ำ รุ่นทดลองใช้งานเป็นเวลา 30 วัน
GlowCodeและAtromatedQAยังรวมถึงความสามารถดังกล่าว พวกเขาทั้งหมดเสนอการทดลองฟรี
Compuware DevPartner (aka BoundsChecker) ในความคมชัดต้องการคอมไพล์ "instrumentation" ที่ช้าลงและแอปพลิเคชันจะทำงานช้าลงเมื่อตรวจสอบข้อผิดพลาด และ BoundsChecker ไม่สามารถทำงานกับ evsrions 64 บิตเลย เรายอมแพ้กับเครื่องมือนั้น
เครื่องมือที่ดีที่สุดที่ฉันเคยใช้คือDevPartner BoundsChecker - มันไม่ฟรี แต่มันมีระยะเวลาการประเมิน
หากคุณไม่กลัว mingw นี่คือลิงค์บางส่วน (บางอันอาจทำงานกับ MSVC) ... http://betterlogic.com/roger/?p=1140
เราเพิ่งจะเสร็จสิ้นเครื่องมือตรวจสอบความปลอดภัยหน่วยความจำสำหรับ Windows ที่จัดการ GCC และ Micrsoft Visual C (ไม่ใช่ C ++) และกำลังมองหาผู้ทดสอบเบต้า
แก้ไข 12 มิถุนายน 2011: ไม่ใช่เบต้าอีกต่อไปตอนนี้ผลิตสำหรับ GCC และ Microsoft Visual Studio C
ฉันพบโครงการ SF วันนี้:
http://sourceforge.net/p/valgrind4win/wiki/Home/
พวกเขากำลังพอร์ต valgrind ไปยัง Windows อาจเป็นไปได้ในหลายปีที่เราจะมี valgrind ที่เชื่อถือได้บน windows
ลองดูคำถามนี้: Valgrind ใช้แทน Windows ได้หรือไม่? . แม้ว่าจะมีการถามตัวแทนทั่วไปสำหรับ valgrind แต่ส่วนใหญ่จะพูดถึงตัวตรวจจับการรั่วไหลของหน่วยความจำและไม่ใช่การตรวจจับสภาพการแข่งขัน
ฉันใช้ Insure ++ ซึ่งทำงานได้อย่างยอดเยี่ยมในการค้นหาการรั่วไหลของหน่วยความจำ c ++ หน่วยความจำและข้อบกพร่องอื่น ๆ เช่นตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นข้อผิดพลาดของตัวชี้สายอักขระ ฯลฯ นอกจากนี้ยังแสดงภาพ รหัสของคุณ .. คุณสามารถลองใช้กับเวอร์ชั่นเทรลได้
คุณอาจต้องการอ่านสิ่งที่ Mozilla กำลังทำเกี่ยวกับการรั่วไหลของหน่วยความจำ เครื่องมือหนึ่งในกล่องเครื่องมือของพวกเขาคือตัวรวบรวมขยะ Hans Boehm ที่ใช้เป็นเครื่องตรวจจับการรั่วไหลของหน่วยความจำ
คุณสามารถลองใช้RuntimeChecker รุ่นทดลองกับIBM Purifyทดลองใช้
โซลูชันฟรีจะใช้รหัสต่อไปนี้ใน Visual Studio:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
เพียงแค่เขียนสิ่งนี้ไว้ที่ด้านบนสุดของไฟล์ cpp ทั้งหมดของคุณ สิ่งนี้จะตรวจพบการรั่วไหลของหน่วยความจำของแอปพลิเคชันของคุณเมื่อหยุดการดีบักและแสดงรายการในหน้าต่างเอาต์พุต การคลิกสองครั้งที่เส้นหน่วยความจำรั่วจะทำให้คุณเห็นเส้นที่หน่วยความจำถูกจัดสรรและไม่ปล่อย สิ่งนี้อาจช่วยคุณได้: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml