Windows için iyi bir Valgrind yedeği var mı?


210

Valgrind'i sadece Linux için olduğunu keşfettiğimde C kodlamam / hata ayıklamayı geliştirmeye yardım etmek için bakıyordum - işletim sistemimi Linux'a taşımama başka bir ihtiyacım ya da ilgim yok, bu yüzden Windows için eşit derecede iyi bir program olup olmadığını merak ediyordum.


Ne tür hata ayıklama yapmak istiyorsunuz? Valgrind oldukça zengin bir araç setidir ve aşağıdaki cevaplar her türlü yöne işaret etmektedir. Bellek sızıntısı / ayırma hata ayıklaması üzerinde durularak.
jakobengblom2

1
Belki de kodu kontrol etmeniz gerektiğinde Windows'unuzdaki sanal bir Linux makinesinde test edebilirsiniz. geliştirme klasörünü sanal ve sanal olmayan makine arasında paylaşabilirsiniz. yani, kod yeterince taşınabilirse.
Liran Orevi

Yanıtlar:


29

Daha iyi ticari araçlar:


1
Arındırın: kurumsal sahiplikte kaç değişiklik kaldığını gösterdiği gibi, saygıdeğer ama yine de yararlı!
Norman Ramsey

2
Insure ++ sonsuza dek kodunuzu enstrüman olarak alır ve sonsuza dek kodunuzu çalışma zamanında yürütür.
C Johnson

117

Jakobengblom2'nin işaret ettiği gibi, valgrind'in bir takım elbisesi var. Hangisinden bahsettiğinize bağlı olarak, farklı pencere sayaç parçaları vardır. Burada sadece OSS veya ücretsiz araçlardan bahsedeceğim.

1. MemCheck:

Dr. Memory. Nispeten yeni bir araçtır, Windows 7'de çok iyi çalışır. En sevdiğim özellik, raporda aynı sızıntıların ayırma yığınlarını gruplandırmasıdır.

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

Ayrıca UMDH ( http://support.microsoft.com/kb/268343 ) kullandım ve sessiz ve kurulumu kolay buldum. Win2000'den Win7'ye çalışır.

AppVerifier Windows yerel kod geliştiricileri için bir swissknife olmalıdır, onun "bellek" denetleyicisi benzer bir iş yapar http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Benim favorim verysleepy ( http://www.codersnotes.com/sleepy) ) Küçük ama çok kullanışlı ve kullanımı kolay.

Daha fazla özelliğe ihtiyacınız varsa, AMD CodeAnalyst ™ Performans Analizörü ücretsizdir: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Windows Performans Analizi araçları Microsoft'tan bağımsızdır, kullanımı çok kolay değildir, ancak zaman harcamak istiyorsanız işinizi halledebilirsiniz. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx İndir: http://msdn.microsoft.com/en-us/performance / cc752957

3. Masif:

Windows'taki benzer (tam olarak eşleşmeyen) ücretsiz araçlar şunlardır:

Sysinternals'tan VMMap: http://technet.microsoft.com/en-us/sysinternals/dd535533

! windbg'de yığın komutu: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Önbellekleme:

Yukarıda belirtilen Windows Performans Araçları, belirli düzeyde L2 önbellek profil oluşturma yeteneğini kaçırmaktadır, ancak Cachegrind kadar iyi ve kullanımı kolay değildir.

5. DRD:

Windows'ta henüz ücretsiz ve güçlü bir şey bulamadım, biraz yakın olan bulabileceğim tek pencere aracı AppVerifier'deki "kilit" denetleyicisi: http://msdn.microsoft.com/tr-tr/library /dd371695%28v=vs.85%29.aspx


2
Ayrıca gperftools (eski adıyla Google PerfTools) var . Valgrind değiştirme (gerçekten nedir) değil ama yeni bir malloc, cpu profiler, yığın profiler ve denetleyicisi var. Linux ve Windows (inc Mingw) ve diğer birleşimlerde destek olarak görülmeye değer.
alexr

30

Windows uygulamanızda hata ayıklamak için neden Valgrind + Wine kullanmıyorsunuz? Bkz. Http://wiki.winehq.org/Wine_and_Valgrind

(Chromium bunu Windows sürümünde bellek hataları olup olmadığını kontrol etmek için kullanır; build.chromium.org adresine bakın ve deneysel veya bellek şelalelerine bakın ve şarap arayın.)

Bellek de var, bkz. Dynamorio.org/drmemory.html


3
Çünkü o zaman bir Windows uygulamasında hata ayıklama yapmayacaksınız - bir Linux uygulamasında hata ayıklama yapacaksınız.
John Dibling

33
Şarapta yeniden derlemeye gerek yok. .Exe ve .pdb dosyalarınızı bir Linux kutusuna aktarmanız yeterlidir. Ve bir Linux uygulamasında hata ayıklamak olmaz; tam Windows uygulamanızda hata ayıklama yapıyorsunuz.
Dan Kegel

2
Tam olarak, gerçek bir şeyi topal bir klondan kullanmak daha iyidir: D Love valgrind.
alternatif

11
Güzel! Windows'dan linux çalıştıran, yazılımınızı neredeyse vm şarabında, valgrind vm'de çalıştıran sanal bir makine çalıştırabilirsiniz. Windows bir windows vm içinde linux çalışan bir vm çalıştırılırsa bonus puan :)
Imbrondir

15

Visual C ++ için Visual Leak Detector'ı deneyin . Onu kullandığımda, bir newçağrıdan bir bellek sızıntısı tespit etti ve sızıntının kaynak kodundaki gerçek satırı döndürdü. En son sürümü http://vld.codeplex.com/ adresinde bulabilirsiniz .


Benim için işe yaramıyor gibi görünüyor. Hatta biraz bellek ayırmaktan ve boşuna bırakmaktan başka bir şey yapmayan basit bir proje yaratmaya çalıştım. VLD tespit etmedi. : - |
Synetech

@Synetech inc. VS2010'da aynı problemi yaşadım ... VLD'nin en yeni versiyonunu kullanmak sorunumu çözdü
relaxxx

14

Kullandığınız Windows için geliştirme ortamı kendi araçlarını içerebilir. Visual Studio, örneğin, programlarınızdaki bellek sızıntılarını algılamanıza ve izole etmenize olanak tanır


6
Çok az pratik kullanıma sahiptir. Sorunlu tahsisler için dosya adını / satır numarasını kaydeder, ancak yalnızca doğrudan malloc'u çağırırsanız bilgilendirici olur. New / delete komutunu kullanırken, new.h işlevini "rahatsız edici" kod olarak yardımcı olur.
user9665

3
Benim için doğru çalışıyor, yeni / sil bile kullanılan doğru satırı işaret ediyor.
Rodrigo

Fakat bir kütüphane fonksiyonu tahsis edilirse çalışır mı? Örneğin strdup.
Alex Budovski

1
Valdrind bellek sızıntılarını bulmaktan çok daha fazlasını yapar , çoğunlukla serbest bırakılmış ve başlatılmamış yığın ve yığın belleğin kullanımını bulmak için kullanırım, aksi takdirde hata ayıklamak inanılmaz derecede zor olabilir.
ideasman42

1
@ user9665 Görsel Sızıntı Detektörü ( vld.codeplex.com ), minimum sos kodu değişiklikleri ile her bellek sızıntısı için tam çağrı kaydı sağlar. Sitedeki örneği kontrol edin
KindDragon

14

bazı araçları listelemek istiyorum, umut faydalı olacaktır

daha fazla ayrıntı için bu makaleyi okuyun

  1. Arındırmak
  2. Sınır Denetleyicisi
  3. Kapak (temelde bir kod analizörüdür, ancak statik olarak bellek sızıntısını yakalar)
  4. Işıma Kodu
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. sigortalayın ++


12

Windows için hata ayıklama araçlarının Pageheap.exe parçası vardır. Ücretsizdir ve temel olarak özel bir bellek ayırıcısı / dağıtıcısıdır.

Bkz. Http://support.microsoft.com/kb/286470


Pageheap / gflags bazı kötü yığın yolsuzluk sorunlarının dibine ulaşmama yardımcı oldu.
the_mandrill

gflags+ gdb(Mingw'den) tanıda yardımcı buldum .
Jarekczek

8

Visual Studio ile birlikte genellikle Visual Leak Detector veya bir win32 api çağrısı olan _CrtDumpMemoryLeaks () kullanıyorum. İkisi de fantezi bir şey değil ama işi hallediyorlar.


6

Geçmişte Compuware DevPartner Studio'yu kullanma şansım oldu ve bu gerçekten iyiydi, ama oldukça pahalı. Daha ucuz bir çözüm GlowCode olabilir , ben sadece 5.x sürümü ile çalıştım ve hata ayıklamak için gereken bir sürece ekleme bazı sorunlara rağmen, oldukça iyi çalıştı.


Pahalı evet. Sadece profiler parçasını kullanarak bir hafta sonu geri ödedi.
EvilTeach



4

Benzer araçların bir listesi için Yazılım KG Test ve Test Aracı Kaynakları sayfasındaki " Kaynak Test Araçları " bağlantısına bakın .

Geçmişte profilleme için BoundsChecker, DevPartner Studio ve Intel V-Tune kullandım. V-Tune'u en çok sevdim; çeşitli Intel yonga setlerini taklit edebilirsiniz ve bu platform için nasıl optimize edeceğinize dair ipuçları verir.



3

LeakDiag, UMDH, App Doğrulayıcı, DebugDiag, kodun sağlamlığını artırmak ve bellek sızıntılarını bulmak için yararlı araçlardır.


3

Boost Test kitaplığı bellek sızıntılarını algılayabilir.





2

Borland / CodeGear / Embarcadero C ++ Builder ile geliştiriyorsanız, CodeGuard'ı kullanabilirsiniz.


2

Neredeyse tüm Profilers bellek sızıntılarını kontrol etmeyi içerir ve belleğin ne zaman tahsis edildiğini gösterir.

Intels Paralel Müfettiş'i tavsiye edebilirim . Kullanımı basit ve yeniden derleme gerektirmez. Deneme sürümü 30 gün sürer.

GlowCode ve AtromatedQA da bu tür kapasiteleri içerir. Hepsi ücretsiz denemeler sunuyor.

Kontrast'ta Compuware DevPartner (diğer adıyla BoundsChecker) yavaşlatılmış bir "enstrümantasyon" derlemesine ihtiyaç duyuyor ve uygulama hataları kontrol ederken daha yavaş çalışıyor. Ve BoundsChecker hiç 64 Bit evsrion ile çalışamaz. Bu araçtan vazgeçtik.


2
Kesinlikle kızdırma kodu tavsiye ederim. Geçmişte benim app tarafından çağrılan bir dll içinde bir bellek sızıntısı bulmak için kullandım.
Bob

DevPartner'ı son işyerimde kullanırken büyük yavaşlama şikayetleri vardı. Ne kadar yavaş olacağından dolayı kullanmaktan kaçınmak için her şeyi yapıyorlar.
Calyth




2

Windows için, GCC ve Micrsoft Visual C'yi (henüz C ++ değil) işleyen ve Beta testçileri arayan bir Bellek Güvenliği kontrol aracını tamamlıyoruz .

EDIT 12 Haziran 2011: Artık Beta değil, şimdi GCC ve Microsoft Visual Studio C için prodüksiyon.




1

C ++ bellek sızıntıları / bozulmaları ve başlatılmamış değişkenler, işaretçi hataları, dizeler vb. kodunuz .. İz sürüm için deneyebilirsiniz ..



1

IBM Purify deneme sürümüne RuntimeChecker deneme sürümünü deneyebilirsiniz .

Visual Studio'da aşağıdaki kodu kullanmak ücretsiz bir çözüm olacaktır:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Bunu tüm cpp dosyalarınızın en üstüne yazın. Bu, hata ayıklama çalışmasını durdururken uygulamanızın bellek sızıntılarını algılar ve bunları çıkış penceresinde listeler. Bir bellek sızıntısı hattına çift tıkladığınızda, belleğin tahsis edildiği ve asla serbest bırakılmadığı hat sizi aydınlatacaktır. Bu size yardımcı olabilir: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.