Apakah ada pengganti Valgrind yang bagus untuk Windows?


210

Saya mencari Valgrind untuk membantu meningkatkan coding C / debugging saya ketika saya menemukan itu hanya untuk Linux - Saya tidak punya kebutuhan atau minat lain dalam memindahkan OS saya ke Linux jadi saya bertanya-tanya apakah ada program yang sama bagusnya untuk Windows.


Jenis debugging apa yang ingin Anda lakukan? Valgrind adalah toolset yang sangat kaya, dan jawaban di bawah ini menunjukkan semua jenis arah. Dengan penekanan pada kebocoran memori / alokasi debugging.
jakobengblom2

1
Mungkin Anda dapat menguji kode pada mesin Linux virtual di dalam Windows Anda, tepat ketika Anda perlu memeriksanya. Anda dapat berbagi folder pengembangan antara mesin virtual dan non-virtual. yaitu, jika kodenya cukup portabel.
Liran Orevi

Jawaban:


29

Beberapa alat komersial yang lebih baik:


1
Purify: terhormat tetapi masih bermanfaat, seperti yang ditunjukkan oleh berapa banyak perubahan kepemilikan perusahaan yang telah bertahan!
Norman Ramsey

2
Asuransikan ++ membutuhkan selamanya untuk instrumen kode Anda, dan selamanya untuk menjalankan kode Anda saat runtime.
C Johnson

117

Seperti yang ditunjukkan jakobengblom2, valgrind memiliki serangkaian alat. Tergantung yang mana yang Anda bicarakan ada beberapa bagian penghitung jendela. Saya hanya akan menyebutkan OSS atau alat gratis di sini.

1. MemCheck:

Memory Dr. Ini adalah alat yang relatif baru, bekerja dengan sangat baik pada Windows 7. Fitur favorit saya adalah mengelompokkan tumpukan alokasi kebocoran yang sama dalam laporan.

http://code.google.com/p/drmemory/

Saya juga menggunakan UMDH ( http://support.microsoft.com/kb/268343 ) dan merasa cukup berguna dan mudah diatur. Ini bekerja dari Win2000 ke Win7.

AppVerifier adalah harus memiliki swissknife untuk pengembang kode asli windows, "memory" checker-nya melakukan pekerjaan yang sama http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Favorit saya adalah sangat mengantuk ( http://www.codersnotes.com/sleepy ) Ini kecil tapi sangat berguna dan mudah digunakan.

Jika Anda membutuhkan lebih banyak fitur, AMD CodeAnalyst ™ Performance Analyzer gratis: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Alat Analisis Kinerja Windows bebas dari Microsoft, tidak sangat mudah digunakan tetapi dapat menyelesaikan pekerjaan jika Anda bersedia menghabiskan waktu. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Unduh: http://msdn.microsoft.com/en-us/performance / cc752957

3. Massif:

Alat gratis serupa (tidak persis sama persis) di windows adalah:

VMMap dari sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533

! heap command in windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

Di atas disebutkan Windows Performance Tools memiliki tingkat tertentu dari kemampuan L2 cache miss profiling tetapi tidak cukup baik dan mudah digunakan sebagai Cachegrind.

5. DRD:

Belum menemukan sesuatu yang gratis dan sekuat Windows, satu-satunya alat gratis untuk windows yang saya temukan agak dekat adalah pemeriksa "kunci" di AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
Ada juga gperftools (sebelumnya Google PerfTools) . Ini bukan pengganti valgrind (apa yang sebenarnya) tetapi memiliki malloc baru, profiler cpu, heap profiler dan checker. Layak dilihat karena dukungannya pada Linux dan Windows (inc Mingw) dan unix lainnya.
alexr

30

Mengapa tidak menggunakan Valgrind + Wine untuk men-debug aplikasi Windows Anda? Lihat http://wiki.winehq.org/Wine_and_Valgrind

(Chromium menggunakan ini untuk memeriksa versi Windows untuk kesalahan memori; lihat build.chromium.org dan lihat air terjun eksperimental atau memori, dan cari anggur.)

Ada juga Dr. Memory, lihat dynamorio.org/drmemory.html


3
Karena dengan begitu Anda tidak akan men-debug aplikasi Windows - Anda akan men-debug aplikasi Linux.
John Dibling

33
Tidak perlu mengkompilasi ulang dalam Wine. Cukup transfer .exe dan .pdb Anda ke kotak Linux. Dan Anda tidak akan men-debug aplikasi Linux; Anda sedang debug aplikasi Windows Anda.
Dan Kegel

2
Tepat, lebih baik menggunakan hal yang asli daripada klon timpang: D Love valgrind.
alternatif

11
Bagus! Dari windows Anda dapat menjalankan mesin virtual yang menjalankan linux, menjalankan perangkat lunak Anda dalam anggur hampir vm, di valgrind vm. Poin bonus jika windows dijalankan dari vm yang menjalankan linux di dalam windows vm :)
Imbrondir

15

Untuk Visual C ++, coba Visual Leak Detector . Ketika saya menggunakannya, mendeteksi kebocoran memori dari newpanggilan dan mengembalikan baris aktual dalam kode sumber kebocoran. Rilis terbaru dapat ditemukan di http://vld.codeplex.com/ .


Sepertinya itu tidak berhasil untuk saya. Saya bahkan mencoba membuat proyek sederhana yang pada dasarnya tidak lain adalah mengalokasikan sebagian memori dan tidak membebaskannya. VLD tidak mendeteksi itu. : - |
Synetech

@Synetech inc. Saya memiliki masalah yang sama di VS2010 ... Menggunakan versi terbaru VLD memecahkan masalah saya
relaxxx

14

Lingkungan pengembangan untuk Windows yang Anda gunakan mungkin mengandung alat sendiri. Visual Studio, misalnya, memungkinkan Anda mendeteksi dan mengisolasi kebocoran memori dalam program Anda


6
Ini adalah penggunaan praktis yang sangat sedikit. Ini akan mencatat nama file / linenumber untuk alokasi yang menyinggung, tetapi itu hanya informatif jika Anda memanggil malloc secara langsung. Saat menggunakan baru / hapus, itu tidak akan membantu menunjukkan new.h sebagai kode "menyinggung".
user9665

3
Ini berfungsi dengan baik untuk saya, menunjuk garis yang tepat bahkan baru / hapus digunakan.
Rodrigo

Tetapi apakah itu akan berfungsi jika fungsi perpustakaan mengalokasikan? Misalnya strdup.
Alex Budovski

1
Valdrind melakukan lebih banyak daripada menemukan kebocoran memori, saya terutama menggunakannya untuk menemukan penggunaan stack dan heap memory yang dibebaskan dan tidak diinisialisasi yang bisa sangat sulit untuk di-debug sebaliknya.
ideasman42

1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) menyediakan callstack penuh untuk setiap kebocoran memori dengan perubahan kode sumber minimal. Lihat contoh di situs
KindDragon

14

saya ingin daftar beberapa alat, harapan akan bermanfaat

baca artikel ini untuk lebih detail

  1. Memurnikan
  2. Pemeriksa Batas
  3. Coverity (pada dasarnya ini adalah penganalisa kode tetapi, ia akan menangkap kebocoran memori secara statis)
  4. Kode Cahaya
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Asuransikan ++


12

Ada Pageheap.exe bagian dari alat debugging untuk Windows. Ini gratis dan pada dasarnya adalah pengalokasi / deallocator memori khusus.

Lihat http://support.microsoft.com/kb/286470


Pageheap / gflags telah membantu saya menemukan beberapa masalah korupsi yang parah.
the_mandrill

Saya menemukan gflags+ gdb(dari mingw) membantu dalam diagnosis.
Jarekczek

8

Dalam kombinasi dengan Visual Studio saya biasanya menggunakan Visual Leak Detector atau cukup _CrtDumpMemoryLeaks () yang merupakan panggilan api win32. Keduanya tidak mewah tetapi mereka menyelesaikan pekerjaan.


6

Saya memiliki kesempatan untuk menggunakan Compuware DevPartner Studio di masa lalu dan itu benar-benar bagus, tapi itu cukup mahal. Solusi yang lebih murah adalah GlowCode , saya hanya bekerja dengan versi 5.x dan, meskipun ada beberapa masalah dalam melampirkan proses yang saya butuhkan untuk debug, ini bekerja dengan cukup baik.


Ya mahal. Membayar kembali dalam satu pekan, hanya menggunakan potongan profiler.
EvilTeach



4

Lihat tautan " Alat Uji Sumber " pada halaman Perangkat Lunak QA Pengujian dan Sumber Daya Alat Uji untuk daftar alat serupa.

Saya telah menggunakan BoundsChecker, DevPartner Studio dan Intel V-Tune di masa lalu untuk profil. Saya menyukai V-Tune yang terbaik; Anda bisa meniru berbagai chipset Intel dan itu akan memberi Anda petunjuk tentang cara mengoptimalkan untuk platform itu.



3

LeakDiag, UMDH, App Verifier, DebugDiag, semua adalah alat yang berguna untuk meningkatkan kekokohan kode dan menemukan kebocoran memori.


3

Pustaka Tes Peningkatan dapat mendeteksi kebocoran memori.





2

Jika Anda mengembangkan dengan Borland / CodeGear / Embarcadero C ++ Builder, Anda bisa menggunakan CodeGuard.


2

Kurang lebih semua Profiler termasuk memeriksa kebocoran memori dan menunjukkan kepada Anda tumpukan ketika memori dialokasikan.

Saya dapat merekomendasikan Intels Parallel Inspector . Mudah digunakan dan tidak perlu dikompilasi ulang. Versi percobaan berjalan selama 30 hari.

GlowCode dan AtromatedQA juga menyertakan kapabilit tersebut. Mereka semua menawarkan uji coba gratis.

Compuware DevPartner (alias BoundsChecker) di Contrast membutuhkan kompilasi ulang "instrumentasi" yang diperlambat dan aplikasi juga berjalan lebih lambat saat memeriksa kesalahan. Dan BoundsChecker tidak dapat bekerja dengan evsrions 64 Bit sama sekali. Kami menyerah pada alat itu.


2
Saya pasti akan merekomendasikan glowcode. Saya telah menggunakannya di masa lalu untuk menemukan kebocoran memori dalam dll yang dipanggil oleh aplikasi saya.
Bob

Ada keluhan tentang perlambatan besar saat menggunakan DevPartner di tempat kerja terakhir saya. Mereka melakukan segalanya untuk menghindari menggunakannya karena seberapa lambat itu akan terjadi.
Calyth




2

Kami baru saja menyelesaikan alat pemeriksaan Keamanan Memori untuk Windows, yang menangani GCC dan Micrsoft Visual C (belum C ++), dan sedang mencari penguji Beta.

EDIT 12 Juni 2011: Bukan Beta lagi, sekarang produksi untuk GCC dan Microsoft Visual Studio C.




1

Saya menggunakan Insure ++ yang melakukan pekerjaan yang sangat baik dalam menemukan kebocoran memori c ++ / korupsi dan banyak bug lainnya seperti variabel tidak diinisialisasi, kesalahan pointer, string dll., Ini juga melakukan visual "Kode cakupan" dan menjalankan penggunaan memori waktu dll .. yang memberikan lebih percaya diri pada kode Anda .. Anda dapat mencobanya untuk versi jejak ..



1

Anda dapat mencoba uji coba RuntimeChecker atau ke IBM Purify uji coba ..

Solusi gratis adalah menggunakan kode berikut di Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Cukup tulis ini di atas semua file cpp Anda. Ini akan mendeteksi kebocoran memori aplikasi Anda saat menghentikan proses debug dan mencantumkannya di jendela output. Mengklik dua kali pada garis kebocoran memori akan mengarahkan Anda pada garis di mana memori dialokasikan dan tidak pernah dirilis. Ini dapat membantu Anda: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.