Valgrind ใช้แทน Windows ได้ดีหรือไม่?


210

ฉันกำลังมองหา Valgrind เพื่อช่วยปรับปรุงการเข้ารหัส / การดีบัก C ของฉันเมื่อฉันค้นพบว่ามันเป็นเพียงสำหรับ Linux - ฉันไม่มีความต้องการหรือความสนใจในการย้ายระบบปฏิบัติการของฉันไปยัง Linux ดังนั้นฉันสงสัยว่ามีโปรแกรมที่ดีสำหรับ Windows


การดีบักแบบใดที่คุณต้องการทำ Valgrind เป็นชุดเครื่องมือที่ค่อนข้างสมบูรณ์และคำตอบด้านล่างชี้ไปในทุกทิศทาง โดยเน้นการดีบักการรั่วไหล / จัดสรรหน่วยความจำ
jakobengblom2

1
บางทีคุณสามารถทดสอบรหัสบนเครื่อง Linux เสมือนใน Windows ของคุณเมื่อคุณต้องการตรวจสอบ คุณสามารถแชร์โฟลเดอร์การพัฒนาระหว่างเครื่องเสมือนและเครื่องเสมือน กล่าวคือถ้ารหัสนั้นพกพาได้เพียงพอ
Liran Orevi

คำตอบ:


29

เครื่องมือเชิงพาณิชย์ที่ดีกว่า:


1
ทำให้บริสุทธิ์: เป็นที่เคารพ แต่ก็ยังมีประโยชน์ดังที่แสดงให้เห็นว่าการเปลี่ยนแปลงของความเป็นเจ้าของ บริษัท นั้นรอดชีวิตมาได้!
นอร์แมนแรมซีย์

2
Insure ++ ใช้เวลาตลอดไปในการสร้างรหัสของคุณและตลอดไปเพื่อรันโค้ดของคุณที่รันไทม์
C จอห์นสัน

117

เมื่อ 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


2
นอกจากนี้ยังมีgperftools (เดิม PerfTools ของ Google) มันไม่ใช่การแทนที่ valgrind (สิ่งที่เป็นจริง) แต่มี malloc ใหม่, cpu profiler, heap profiler และ checker ลองดูสิเพราะมันรองรับ Linux และ Windows (inc Mingw) และ unices อื่น ๆ
alexr

30

ทำไมไม่ใช้ Valgrind + Wine เพื่อดีบักแอป Windows ของคุณ ดู http://wiki.winehq.org/Wine_and_Valgrind

(Chromium ใช้สิ่งนี้เพื่อตรวจสอบข้อผิดพลาดของหน่วยความจำเวอร์ชัน Windows ดู build.chromium.org และดูน้ำตกการทดลองหรือหน่วยความจำและค้นหาไวน์)

นอกจากนี้ยังมีหน่วยความจำของดร. ดู dynamorio.org/drmemory.html


3
เพราะคุณจะไม่สามารถดีบั๊กแอพ Windows ได้ - คุณต้องทำการดีบั๊กแอพ Linux
John Dibling

33
ไม่จำเป็นต้องคอมไพล์ซ้ำในไวน์ เพียงโอน. exe และ. pdb ไปยังกล่อง Linux และคุณจะไม่สามารถดีบักแอป Linux ได้ คุณกำลังดีบักแอพ Windows ที่แน่นอนของคุณ
Dan Kegel

2
การใช้ของจริงดีกว่า clone lame: D Love valgrind
ทางเลือก

11
ดี! จากหน้าต่างคุณสามารถเรียกใช้เครื่องเสมือนที่ใช้ linux เรียกใช้ซอฟต์แวร์ของคุณในไวน์เกือบ vm ใน valgrind vm คะแนนโบนัสหาก windows ถูกเรียกใช้จาก vm ที่ใช้ linux ภายใน windows vm :)
00 เวลา 10: 00 น

15

สำหรับ Visual C ++ ลองตรวจจับการรั่วไหลของ Visual เมื่อฉันใช้มันจะตรวจพบการรั่วไหลของหน่วยความจำจากการnewโทรและส่งคืนสายจริงในซอร์สโค้ดของการรั่วไหล รุ่นล่าสุดสามารถพบได้ที่http://vld.codeplex.com/


ดูเหมือนจะไม่ได้ผลสำหรับฉัน ฉันยังพยายามสร้างโครงการง่าย ๆ ที่ไม่ได้ทำอะไรนอกจากการจัดสรรหน่วยความจำและไม่ปล่อยให้เป็นอิสระ VLD ตรวจไม่พบ : - |
Synetech

@Synetech inc ฉันมีปัญหาเดียวกันใน VS2010 ... การใช้ VLD รุ่นล่าสุดแก้ปัญหาของฉันได้แล้ว
relaxxx

14

สภาพแวดล้อมการพัฒนาสำหรับ Windows ที่คุณใช้อาจมีเครื่องมือของตัวเอง ตัวอย่างเช่น Visual Studio ให้คุณตรวจจับและแยกการรั่วไหลของหน่วยความจำในโปรแกรมของคุณ


6
มันใช้งานได้จริงน้อยมาก มันจะบันทึกชื่อไฟล์ / linenumber สำหรับการจัดสรรที่ไม่เหมาะสม แต่จะให้ข้อมูลเท่านั้นหากคุณเรียก malloc โดยตรง เมื่อใช้ใหม่ / ลบมันจะช่วยระบุ new.h โดยไม่ช่วยเหลือเป็นรหัส "ละเมิด"
user9665

3
มันทำงานได้อย่างถูกต้องสำหรับฉันชี้บรรทัดที่ถูกต้องแม้จะใช้ใหม่ / ลบ
Rodrigo

แต่มันจะทำงานได้ไหมถ้าฟังก์ชั่นห้องสมุดจัดสรร? เช่น strdup
Alex Budovski

1
Valdrind ทำอะไรได้มากมายจากนั้นก็พบการรั่วไหลของหน่วยความจำฉันใช้มันเป็นหลักในการค้นหาการใช้หน่วยความจำอิสระและกองซ้อนและหน่วยความจำแบบกองซ้อน
ideasman42

1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) ให้ callstack เต็มรูปแบบสำหรับการรั่วไหลของหน่วยความจำแต่ละหน่วยด้วยการเปลี่ยนรหัส souce น้อยที่สุด ตรวจสอบตัวอย่างบนไซต์
KindDragon

14

ฉันต้องการแสดงรายการเครื่องมือบางอย่างหวังว่าจะเป็นประโยชน์

อ่านบทความนี้เพื่อดูรายละเอียดเพิ่มเติม

  1. เพียวริฟาย
  2. ตัวตรวจสอบขอบเขต
  3. Coverity (โดยทั่วไปจะเป็นเครื่องวิเคราะห์รหัส แต่จะจับหน่วยความจำรั่วในแบบคงที่)
  4. รหัสโกลว์
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. valgrind
  10. mpatrol
  11. ประกัน ++


12

มีส่วน Pageheap.exe ของเครื่องมือตรวจแก้จุดบกพร่องสำหรับ Windows ได้ฟรีและเป็นตัวจัดสรรหน่วยความจำที่กำหนดเอง / deallocator

ดูhttp://support.microsoft.com/kb/286470


Pageheap / gflags ช่วยให้ฉันไปถึงจุดต่ำสุดของปัญหาคอร์รัปชั่นที่น่ารังเกียจ
the_mandrill

ฉันพบว่าgflags+ gdb(จาก mingw) มีประโยชน์ในการวินิจฉัย
Jarekczek

8

เมื่อใช้ร่วมกับ Visual Studio ฉันมักใช้Visual Leak Detectorหรือเพียงแค่ _CrtDumpMemoryLeaks () ซึ่งเป็นการเรียก win32 api ทั้งคู่ไม่มีอะไรแฟนซี แต่ทำให้งานเสร็จ


6

ฉันเคยมีโอกาสใช้Compuware DevPartner Studioในอดีตและมันดีจริงๆ แต่ก็ค่อนข้างแพง ทางออกที่ถูกกว่าอาจเป็นGlowCodeฉันเพิ่งทำงานกับรุ่น 5.x และแม้จะมีปัญหาบางอย่างในการแนบกับกระบวนการที่ฉันต้องการในการแก้ไขข้อบกพร่องมันทำงานได้ค่อนข้างดี


มีราคาแพงใช่ มันจ่ายคืนในหนึ่งวันหยุดสุดสัปดาห์เพียงแค่ใช้ชิ้นส่วนสร้างโปรไฟล์
EvilTeach



4

ดูลิงค์ " เครื่องมือทดสอบแหล่งที่มา " ในหน้าแหล่งข้อมูลเครื่องมือทดสอบและทดสอบเครื่องมือซอฟต์แวร์สำหรับรายการเครื่องมือที่คล้ายกัน

ฉันเคยใช้ BoundsChecker, DevPartner Studio และ Intel V-Tune ในอดีตสำหรับการทำโปรไฟล์ ฉันชอบ V-Tune ที่ดีที่สุด; คุณสามารถจำลองชิปเซ็ตของ Intel ได้หลากหลายและจะให้คำแนะนำเกี่ยวกับวิธีการปรับแต่งสำหรับแพลตฟอร์มนั้น



3

LeakDiag, UMDH, ตัวตรวจสอบแอพ, DebugDiag เป็นเครื่องมือที่มีประโยชน์ทั้งหมดในการปรับปรุงความทนทานของรหัสและค้นหาการรั่วไหลของหน่วยความจำ


3

ไลบรารี Boost Test สามารถตรวจหารอยรั่วของหน่วยความจำ






2

Profilers มากหรือน้อยรวมถึงการตรวจสอบการรั่วไหลของหน่วยความจำและแสดงสแต็กเมื่อหน่วยความจำถูกจัดสรร

ฉันสามารถขอแนะนำIntels ขนานสารวัตร ใช้งานง่ายและไม่ต้องคอมไพล์ซ้ำ รุ่นทดลองใช้งานเป็นเวลา 30 วัน

GlowCodeและAtromatedQAยังรวมถึงความสามารถดังกล่าว พวกเขาทั้งหมดเสนอการทดลองฟรี

Compuware DevPartner (aka BoundsChecker) ในความคมชัดต้องการคอมไพล์ "instrumentation" ที่ช้าลงและแอปพลิเคชันจะทำงานช้าลงเมื่อตรวจสอบข้อผิดพลาด และ BoundsChecker ไม่สามารถทำงานกับ evsrions 64 บิตเลย เรายอมแพ้กับเครื่องมือนั้น


2
ฉันขอแนะนำ glowcode อย่างไม่ จำกัด ฉันเคยใช้ในอดีตเพื่อค้นหาหน่วยความจำรั่วภายใน dll ที่ถูกเรียกโดยแอพของฉัน
บ๊อบ

มีข้อร้องเรียนจากการชะลอตัวครั้งใหญ่ในขณะที่ใช้ DevPartner ที่ทำงานล่าสุดของฉัน พวกเขาทำทุกอย่างเพื่อหลีกเลี่ยงการใช้เพราะมันจะช้าแค่ไหน
Calyth


2

เครื่องมือหน่วยความจำอีกสำหรับรายชื่อของคุณ: หน่วยความจำตรวจสอบ

ไม่ฟรี แต่ไม่มีที่ไหนใกล้ราคาแพงเท่า Purify หรือ Boundschecker



2

เราเพิ่งจะเสร็จสิ้นเครื่องมือตรวจสอบความปลอดภัยหน่วยความจำสำหรับ Windows ที่จัดการ GCC และ Micrsoft Visual C (ไม่ใช่ C ++) และกำลังมองหาผู้ทดสอบเบต้า

แก้ไข 12 มิถุนายน 2011: ไม่ใช่เบต้าอีกต่อไปตอนนี้ผลิตสำหรับ GCC และ Microsoft Visual Studio C



1

ลองดูคำถามนี้: Valgrind ใช้แทน Windows ได้หรือไม่? . แม้ว่าจะมีการถามตัวแทนทั่วไปสำหรับ valgrind แต่ส่วนใหญ่จะพูดถึงตัวตรวจจับการรั่วไหลของหน่วยความจำและไม่ใช่การตรวจจับสภาพการแข่งขัน


1

ฉันใช้ Insure ++ ซึ่งทำงานได้อย่างยอดเยี่ยมในการค้นหาการรั่วไหลของหน่วยความจำ c ++ หน่วยความจำและข้อบกพร่องอื่น ๆ เช่นตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นข้อผิดพลาดของตัวชี้สายอักขระ ฯลฯ นอกจากนี้ยังแสดงภาพ รหัสของคุณ .. คุณสามารถลองใช้กับเวอร์ชั่นเทรลได้


1

คุณอาจต้องการอ่านสิ่งที่ Mozilla กำลังทำเกี่ยวกับการรั่วไหลของหน่วยความจำ เครื่องมือหนึ่งในกล่องเครื่องมือของพวกเขาคือตัวรวบรวมขยะ Hans Boehm ที่ใช้เป็นเครื่องตรวจจับการรั่วไหลของหน่วยความจำ


1

คุณสามารถลองใช้RuntimeChecker รุ่นทดลองกับIBM Purifyทดลองใช้

โซลูชันฟรีจะใช้รหัสต่อไปนี้ใน Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

เพียงแค่เขียนสิ่งนี้ไว้ที่ด้านบนสุดของไฟล์ cpp ทั้งหมดของคุณ สิ่งนี้จะตรวจพบการรั่วไหลของหน่วยความจำของแอปพลิเคชันของคุณเมื่อหยุดการดีบักและแสดงรายการในหน้าต่างเอาต์พุต การคลิกสองครั้งที่เส้นหน่วยความจำรั่วจะทำให้คุณเห็นเส้นที่หน่วยความจำถูกจัดสรรและไม่ปล่อย สิ่งนี้อาจช่วยคุณได้: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.