ฉันกำลังมองหา Valgrind ที่จะช่วยปรับปรุงการเขียนโค้ด C/การดีบักของฉัน เมื่อฉันพบว่ามันมีไว้สำหรับ Linux เท่านั้น - ฉันไม่มีความต้องการหรือความสนใจอื่นใดในการย้ายระบบปฏิบัติการของฉันไปยัง Linux ดังนั้นฉันจึงสงสัยว่ามีโปรแกรมที่ดีพอๆ กันสำหรับ Windows หรือไม่
มี Valgrind ที่ดีสำหรับ Windows หรือไม่?
คำตอบ (38)
เครื่องมือเชิงพาณิชย์ที่ดีบางอย่าง:
ตามที่ jakobengblom2 ชี้ให้เห็น valgrind มีชุดเครื่องมือมากมาย ขึ้นอยู่กับว่าคุณกำลังพูดถึงส่วนใดมีส่วนเคาน์เตอร์หน้าต่างที่แตกต่างกัน ฉันจะพูดถึง OSS หรือเครื่องมือฟรีที่นี่เท่านั้น
1. MemCheck:
ดร.เมมโมรี่ มันเป็นเครื่องมือที่ค่อนข้างใหม่ ทำงานได้ดีมากบน Windows 7 คุณสมบัติที่ฉันชอบคือมันจัดกลุ่มสแต็กการจัดสรรของการรั่วไหลเดียวกันในรายงาน
http://code.google.com/p/drmemory/
ฉันยังใช้ UMDH( http://support.microsoft.com/kb/268343 ) และ พบว่ามีประโยชน์และติดตั้งง่าย ใช้งานได้ตั้งแต่ Win2000 ถึง Win7
AppVerifier เป็นสิ่งที่ต้องมีสำหรับนักพัฒนาโค้ดเนทีฟของ Windows ตัวตรวจสอบ "หน่วยความจำ" ของมันจะทำงานที่คล้ายกัน http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
<แข็งแกร่ง>2. โทรบด:
สิ่งที่ฉันชอบคือ 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. แคชบด:
เครื่องมือประสิทธิภาพของ Windows ที่กล่าวมาข้างต้นมีความสามารถในการจัดทำโปรไฟล์แคช L2 ในระดับหนึ่ง แต่ยังไม่ดีเท่าและใช้งานง่ายเท่ากับ Cachegrind
<แข็งแกร่ง>5. ดร.ดี:
ยังไม่พบสิ่งใดฟรีและมีประสิทธิภาพเท่าบน 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 และดูน้ำตกเชิงทดลองหรือหน่วยความจำ และค้นหาไวน์)
นอกจากนี้ยังมี Dr. Memory ดูที่ dynamorio.org/drmemory.html
สำหรับ Visual C++ ให้ลองใช้ Visual Leak Detector เมื่อฉันใช้มัน มันตรวจพบหน่วยความจำรั่วจากการเรียก new
และส่งคืนบรรทัดจริงในซอร์สโค้ดของการรั่วไหล สามารถดูรุ่นล่าสุดได้ที่ http://vld.codeplex.com/
สภาพแวดล้อมการพัฒนาสำหรับ Windows ที่คุณใช้อาจมีเครื่องมือของตัวเอง ตัวอย่างเช่น Visual Studio ช่วยให้คุณสามารถ ตรวจจับและแยกหน่วยความจำ รั่วไหลในโปรแกรมของคุณ
ฉันต้องการแสดงรายการเครื่องมือบางอย่าง หวังว่าจะมีประโยชน์
อ่านบทความนี้เพื่อดูรายละเอียดเพิ่มเติม
- เพียวริฟาย
- ตัวตรวจสอบขอบเขต
- Coverity (โดยพื้นฐานแล้วมันเป็นเครื่องวิเคราะห์โค้ด แต่มันจะตรวจจับหน่วยความจำรั่วแบบคงที่)
- รหัสเรืองแสง
- ดมัลลอค
- ซีมัลลอค
- NJAMD
- ยัมดี
- วาลกรินด์
- ตำรวจตระเวน
- ประกัน++
มี Pageheap.exe เป็นส่วนหนึ่งของเครื่องมือดีบักสำหรับ Windows ใช้งานได้ฟรีและโดยพื้นฐานแล้วเป็นตัวจัดสรร/จัดสรรหน่วยความจำแบบกำหนดเอง
ดู http://support.microsoft.com/kb/286470
gflags
+ gdb
(จาก mingw) มีประโยชน์ในการวินิจฉัย
- person Jarekczek; 31.10.2012
เมื่อใช้ร่วมกับ Visual Studio โดยทั่วไปฉันใช้ Visual Leak Detector หรือเพียงแค่ _CrtDumpMemoryLeaks() ซึ่งเป็นการเรียก win32 api ทั้งสองไม่มีอะไรหรูหรา แต่พวกเขาทำงานให้เสร็จ
ฉันมีโอกาสใช้ Compuware DevPartner Studio ในอดีต และนั่นเป็นสิ่งที่ดีจริงๆ แต่มันค่อนข้างแพง วิธีแก้ปัญหาที่ถูกกว่าอาจเป็น GlowCode ฉันเพิ่งทำงานกับเวอร์ชัน 5.x และถึงแม้จะมีปัญหาอยู่บ้าง ในการแนบกับกระบวนการที่ฉันต้องการแก้ไขข้อบกพร่อง มันทำงานได้ค่อนข้างดี
ฉันชอบ Memory Validator จากบริษัทที่ชื่อว่า Software Verification มาก
Visual Studio สามารถช่วยตรวจจับการรั่วไหลของหน่วยความจำได้ ดูคำแนะนำและเคล็ดลับ Microsoft Visual C++ -> ส่วน "หน่วยความจำรั่ว" ดูโพสต์ใน SO นี้ด้วย
แม้ว่าการติดตามจริงจะทำได้เฉพาะกับ Team Edition ของ Visual Studio เท่านั้น
ดูลิงก์ "เครื่องมือทดสอบแหล่งที่มา" บนเครื่องมือทดสอบและทดสอบซอฟต์แวร์ QA หน้าแหล่งข้อมูลสำหรับรายการเครื่องมือที่คล้ายกัน
ฉันเคยใช้ BoundsChecker, DevPartner Studio และ Intel V-Tune มาก่อนในการทำโปรไฟล์ ฉันชอบ V-Tune ที่สุด; คุณสามารถจำลองชิปเซ็ต Intel ต่างๆ ได้ และมันจะให้คำแนะนำเกี่ยวกับวิธีการปรับให้เหมาะสมสำหรับแพลตฟอร์มนั้น
Jochen Kalmbach's Memory Leak Detector มีคุณสมบัติหรือไม่
PS: URL ของเวอร์ชันล่าสุดถูกฝังอยู่ที่ไหนสักแห่งในกระทู้ความคิดเห็นของบทความ
LeakDiag, UMDH, App Verifier, DebugDiag ล้วนเป็นเครื่องมือที่มีประโยชน์ในการปรับปรุงความทนทานของโค้ดและค้นหาหน่วยความจำรั่ว
ไลบรารี Boost Test สามารถตรวจจับการรั่วไหลของหน่วยความจำได้
Purify เป็นอย่างไร
ลองใช้ผลิตภัณฑ์ 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 ได้
ไม่มากก็น้อย Profiler ทั้งหมดจะรวมการตรวจสอบหน่วยความจำรั่วและแสดงสแต็กให้คุณเห็นเมื่อมีการจัดสรรหน่วยความจำ
ฉันขอแนะนำ Intels Parallel Inspector ได้ ใช้งานง่ายและไม่จำเป็นต้องคอมไพล์ใหม่ เวอร์ชันทดลองใช้งานเป็นเวลา 30 วัน
GlowCode และ AtromatedQA ยังรวมถึงความสามารถดังกล่าวด้วย พวกเขาทั้งหมดเสนอให้ทดลองใช้ฟรี
Compuware DevPartner (aka BoundsChecker) ใน Contrast ต้องการการคอมไพล์ "เครื่องมือ" ที่ช้าลง และแอปพลิเคชันยังทำงานช้าลงเมื่อตรวจสอบข้อผิดพลาด และ BoundsChecker ไม่สามารถทำงานกับ evsrions 64 บิตได้เลย เรายอมแพ้กับเครื่องมือนั้น
เครื่องมือที่ดีที่สุดที่ฉันเคยใช้คือ DevPartner BoundsChecker - ไม่ฟรีแต่มีการประเมิน ระยะเวลา.
เครื่องมือหน่วยความจำอื่นสำหรับรายการของคุณ: Memory Validator
ไม่ฟรี แต่ไม่มีที่ไหนใกล้จะแพงเท่ากับ Purify หรือ Boundschecker
หากคุณไม่กลัว mingw นี่คือลิงก์บางส่วน (บางลิงก์อาจใช้ได้กับ MSVC)... http://betterlogic.com/roger/?p=1140
เราเพิ่งดำเนินการเครื่องมือตรวจสอบความปลอดภัยของหน่วยความจำสำหรับ Windows ที่จัดการ GCC และ Micrsoft Visual C (ไม่ใช่ C++) และกำลังมองหาผู้ทดสอบเบต้า
แก้ไข 12 มิถุนายน 2554: ไม่ใช่เบต้าอีกต่อไป ตอนนี้ใช้งานจริงสำหรับ GCC และ Microsoft Visual Studio C
ฉันพบโครงการ SF นี้วันนี้:
http://sourceforge.net/p/valgrind4win/wiki/Home/
พวกเขากำลังย้าย valgrind ไปยัง Windows อาจเป็นไปได้ว่าเราจะมี valgrind ที่เชื่อถือได้บน windows ในอีกหลายปีข้างหน้า
ฉันใช้ 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 ก>
ยูทิลิตี้การถ่ายโอนข้อมูลฮีปโหมดผู้ใช้ (UMDH) ทำงานร่วมกับระบบปฏิบัติการ ระบบเพื่อวิเคราะห์การจัดสรรฮีปของ Windows สำหรับกระบวนการเฉพาะ นั่นเป็นเครื่องมือที่ดีทีเดียวจาก Microsoft ฟรี ที่นี่คือบทช่วยสอนสั้นๆ "วิธีใช้ Umdh.exe เพื่อค้นหาหน่วยความจำรั่ว"
เครื่องมือฟรี DebugDiag จะช่วยค้นหาหน่วยความจำและจัดการกับการรั่วไหล
คุณไม่จำเป็นต้องเพิ่มโปรแกรมของคุณเพื่อให้ DebugDiag ทำงานได้
แม้ว่าจะไม่ใช่โปรแกรมที่ง่ายที่สุดหรือใช้งานง่ายที่สุด! ตรวจสอบให้แน่ใจว่าคุณใช้ Google สำหรับบทช่วยสอนและคำแนะนำเกี่ยวกับวิธีการใช้งาน
คุณสามารถดูบทความ การออกแบบและการปรับใช้โปรไฟล์หน่วยความจำในเกม ใน หนังสือ "การเขียนโปรแกรมเกม Gems 8"
โดยจะแสดงวิธีการใช้โปรไฟล์หน่วยความจำแบบเรียลไทม์แบบกึ่งรบกวนระบบโอเวอร์เฮดระดับต่ำ ซึ่งเป็นซอร์สโค้ดที่ให้ไว้ในซีดีรอม
Clang รองรับปลั๊กอิน Address Sanitizer (ตัวเลือก -faddress-sanitizer) ซึ่งสามารถตรวจจับข้อบกพร่องส่วนใหญ่ที่ Valgrind พบได้ (แต่ยังไม่รองรับการตรวจจับการอ่านหน่วยความจำที่ไม่ได้เตรียมใช้งานและหน่วยความจำรั่ว) ดูหน้านี้ เพื่อเปรียบเทียบกับ Valgrind และเครื่องมืออื่นๆ ที่คล้ายคลึงกัน ขณะนี้กำลังดำเนินการพอร์ต Windows อย่างเป็นทางการ โปรดดูที่พอร์ต Windows ASan
ฉันพยายามสร้างมันเองบน Windows เมื่อสองสามเดือนที่ผ่านมาและล้มเลิกไป ดู ที่เกี่ยวข้องของฉัน คำถาม. สิ่งต่างๆ อาจเปลี่ยนแปลงไปในทางที่ดีขึ้นในขณะนี้หากคุณต้องการลองอีกครั้ง
แค่เป็นแนวคิด คุณยังสามารถใช้ตัวจัดสรรหน่วยความจำและติดตามการโทรทั้งหมดไปยัง malloc และฟรีได้ อย่างไรก็ตาม นี่อาจจะมากเกินไปสำหรับบางโครงการ
Parasoft Insure++ เชื่อถือได้เสมอ:
http://www.parasoft.com/jsp/products/insure.jsp?itemId=63