Czy istnieje dobry zamiennik Valgrind dla systemu Windows?


210

Szukałem w Valgrind, aby poprawić kodowanie / debugowanie C, kiedy odkryłem, że jest to tylko dla Linuksa - nie mam innej potrzeby ani zainteresowania przeniesieniem mojego systemu operacyjnego do Linuxa, więc zastanawiałem się, czy istnieje równie dobry program dla Windows.


Jakie rodzaje debugowania chcesz zrobić? Valgrind jest dość bogatym zestawem narzędzi, a poniższe odpowiedzi wskazują we wszystkich kierunkach. Z naciskiem na debugowanie wycieków / alokacji pamięci.
jakobengblom2

1
Być może możesz przetestować kod na wirtualnej maszynie z Linuksem w systemie Windows, właśnie wtedy, gdy trzeba go sprawdzić. możesz udostępnić folder programistyczny między maszyną wirtualną i niewirtualną. to znaczy, jeśli kod jest wystarczająco przenośny.
Liran Orevi

Odpowiedzi:


29

Więcej dobrych narzędzi komercyjnych:


1
Oczyść: czcigodny, ale nadal przydatny, jak pokazuje to, ile zmian własności korporacyjnej przetrwało!
Norman Ramsey,

2
Insure ++ trwa wieczność, aby instrumentować twój kod, i zawsze, aby wykonać twój kod w czasie wykonywania.
C Johnson,

117

Jak zauważył jakobengblom2, valgrind ma zestaw narzędzi. W zależności od tego, o którym mówisz, są różne części liczników okien. Wspomnę tu tylko o OSS lub bezpłatnych narzędziach.

1. MemCheck:

Dr. Memory. Jest to stosunkowo nowe narzędzie, które działa bardzo dobrze w systemie Windows 7. Moją ulubioną funkcją jest to, że grupuje te same stosy alokacji wycieków w raporcie.

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

Użyłem również UMDH ( http://support.microsoft.com/kb/268343 ) i uznałem, że jest cichy użyteczny i łatwy w konfiguracji. Działa od Win2000 do Win7.

AppVerifier to program typu „swissknife” dla programistów natywnych dla systemu Windows, jego moduł sprawdzania „pamięci” wykonuje podobną pracę http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Moim ulubionym jest bardzo śpiący ( http://www.codersnotes.com/sleepy ) Jest mały, ale bardzo przydatny i łatwy w użyciu.

Jeśli potrzebujesz więcej funkcji, AMD CodeAnalyst ™ Performance Analyzer jest darmowy: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Narzędzia analizy wydajności systemu Windows są wolne od firmy Microsoft, niezbyt łatwe w użyciu, ale mogą wykonać zadanie, jeśli chcesz spędzić czas. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Pobierz: http://msdn.microsoft.com/en-us/performance / cc752957

3. Masyw:

Podobne (niezbyt dokładne dopasowanie) darmowe narzędzia w systemie Windows to:

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

! polecenie polecenia w windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind:

Wyżej wspomniane narzędzia wydajności systemu Windows mają pewien poziom możliwości profilowania pamięci podręcznej L2, ale nie są tak dobre i łatwe w użyciu jak Cachegrind.

5. DRD:

Nie znalazłem jeszcze nic darmowego i tak potężnego w systemie Windows, jedynym darmowym narzędziem dla systemu Windows, które jest nieco blisko, jest moduł sprawdzania blokady w AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
Istnieją również gperftools (wcześniej Google PerfTools) . To nie jest zamiennik valgrind (co tak naprawdę jest), ale ma nowy malloc, profil cpu, profiler sterty i kontroler. Warto przyjrzeć się, ponieważ obsługuje on systemy Linux i Windows (w tym Mingw) oraz inne jednorożce.
alexr

30

Dlaczego nie użyć Valgrind + Wine do debugowania aplikacji Windows? Zobacz http://wiki.winehq.org/Wine_and_Valgrind

(Chromium używa tego do sprawdzania wersji systemu Windows pod kątem błędów pamięci; zobacz build.chromium.org i spójrz na wodospady eksperymentalne lub pamięciowe i szukaj wina.)

Jest też Dr. Memory, patrz dynamorio.org/drmemory.html


3
Ponieważ wtedy nie debugowałbyś aplikacji Windows - debugowałbyś aplikację Linux.
John Dibling,

33
Nie ma potrzeby ponownej kompilacji w Wine. Po prostu przenieś .exe i .pdb do Linux-a. I nie debugowałbyś aplikacji Linux; debugujesz swoją dokładną aplikację Windows.
Dan Kegel

2
Dokładniej, lepiej użyć prawdziwej rzeczy niż kulawy klon: D Love valgrind.
alternatywnie

11
Miły! Z systemu Windows można uruchomić maszynę wirtualną z systemem Linux, uruchamiając oprogramowanie w prawie vm wine, w valgrind vm. Punkty bonusowe, jeśli Windows jest uruchamiany z vm działającego Linuxa w Windows vm :)
Imbrondir

15

W przypadku Visual C ++ wypróbuj Visual Leak Detector . Kiedy go użyłem, wykrył wyciek pamięci z newpołączenia i zwrócił rzeczywistą linię w kodzie źródłowym przecieku. Najnowsze wydanie można znaleźć na stronie http://vld.codeplex.com/ .


Wydaje mi się, że to nie działa. Próbowałem nawet stworzyć prosty projekt, który w zasadzie nie zrobił nic poza przydzieleniem pewnej ilości pamięci i jej uwolnieniem. VLD go nie wykrył. : - |
Synetech

@Synetech inc. Miałem ten sam problem w VS2010 ... Korzystanie z najnowszej wersji VLD rozwiązało mój problem
relaxxx

14

Środowisko programistyczne dla używanego systemu Windows może zawierać własne narzędzia. Na przykład program Visual Studio umożliwia wykrywanie i izolowanie wycieków pamięci w programach


6
Jest bardzo mało praktyczny. Będzie rejestrować nazwę pliku / numer pościeli dla obrażających przydziałów, ale jest to tylko informacja, jeśli zadzwonisz bezpośrednio do malloc. Podczas korzystania z polecenia new / delete bezużytecznie wskaże new.h jako kod „obrażający”.
user9665

3
Działa dla mnie poprawnie, wskazując właściwą linię, używane są nawet nowe / usuń.
Rodrigo

Ale czy będzie działać, jeśli funkcja biblioteki przydzieli? Np. Strdup.
Alex Budovski,

1
Valdrind robi o wiele więcej niż wykrywanie wycieków pamięci, używam go głównie do znajdowania zwolnionej i niezainicjowanej pamięci stosu i sterty, która w innym przypadku może być niezwykle trudna do debugowania.
ideasman42,

1
@ user9665 Wizualny wykrywacz nieszczelności ( vld.codeplex.com ) zapewnia pełny stos wywołań dla każdego wycieku pamięci przy minimalnych zmianach kodu souce. Sprawdź przykład na stronie
KindDragon

14

Chciałbym wymienić jakieś narzędzie, mam nadzieję, że się przyda

przeczytaj ten artykuł, aby uzyskać więcej szczegółów

  1. Oczyścić
  2. Bounds Checker
  3. Pokrycie (w zasadzie jest to analizator kodu, ale przechwytuje wyciek pamięci w stanie statycznym)
  4. Kod blasku
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Ubezpiecz ++


12

Narzędzie do debugowania dla systemu Windows zawiera Pageheap.exe. Jest bezpłatny i jest w zasadzie niestandardowym przydziałem / dezalokatorem pamięci.

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


Pageheap / gflags pomogły mi dotrzeć do sedna niektórych nieprzyjemnych problemów z uszkodzeniem sterty.
the_mandrill

Znalazłem gflags+ gdb(od mingw) pomocny w diagnozie.
Jarekczek

8

W połączeniu z Visual Studio zazwyczaj używam Visual Leak Detector lub po prostu _CrtDumpMemoryLeaks (), która jest wywołaniem interfejsu API systemu Windows. Oba nie są niczym wyjątkowym, ale wykonują zadanie.


6

W przeszłości miałem okazję korzystać z Compuware DevPartner Studio i to było naprawdę dobre, ale jest dość drogie. Tańszym rozwiązaniem może być GlowCode , właśnie pracowałem z wersją 5.x i pomimo pewnych problemów z dołączeniem się do procesu wymaganego do debugowania, działał całkiem dobrze.


Drogie tak. Spłacił się w jeden weekend, używając tylko kawałka profilera.
EvilTeach



4

Zobacz link do „ Source Test Tools ” na stronie Software QA Testing and Test Tool Resources, aby uzyskać listę podobnych narzędzi.

W przeszłości korzystałem z BoundsChecker, DevPartner Studio i Intel V-Tune do profilowania. V-Tune najbardziej mi się podobało; możesz emulować różne mikroukłady Intela, a to da ci wskazówki, jak zoptymalizować dla tej platformy.



3

LeakDiag, UMDH, App Verifier, DebugDiag, to wszystkie przydatne narzędzia do poprawy niezawodności kodu i wykrywania wycieków pamięci.


3

Biblioteka testu wzmocnienia może wykryć wycieki pamięci.





2

Jeśli programujesz w Borland / CodeGear / Embarcadero C ++ Builder, możesz użyć CodeGuard.


2

Mniej więcej wszystkie Profilery obejmują sprawdzanie wycieków pamięci i pokazują stos, gdy pamięć została przydzielona.

Mogę polecić Intels Parallel Inspector . Prosty w użyciu i nie wymaga ponownej kompilacji. Wersja testowa działa przez 30 dni.

GlowCode i AtromatedQA obejmują również takie zdolności. Wszystkie oferują bezpłatne wersje próbne.

Compuware DevPartner (inaczej BoundsChecker) w programie Contrast wymaga spowolnionej ponownej kompilacji „oprzyrządowania”, a aplikacja działa wolniej podczas sprawdzania błędów. A BoundsChecker w ogóle nie może działać z wersjami 64-bitowymi. Zrezygnowaliśmy z tego narzędzia.


2
Z całą pewnością poleciłbym glowcode. Użyłem go w przeszłości, aby znaleźć wyciek pamięci w bibliotece DLL wywoływanej przez moją aplikację.
Bob

Pojawiły się skargi na poważne spowolnienia podczas korzystania z DevPartner w moim ostatnim miejscu pracy. Robią wszystko, aby uniknąć używania go ze względu na to, jak powolne byłoby.
Calyth







1

Użyłem Insure ++, który doskonale sprawdza się w wykrywaniu wycieków / uszkodzeń pamięci c ++ i wielu innych błędów, takich jak niezainicjowane zmienne, błędy wskaźnika, ciągi znaków itp. Ponadto zapewnia wizualne „pokrycie kodu” i użycie pamięci w czasie wykonywania itp., Które dają większą pewność na swój kod .. Możesz wypróbować dla wersji trailowej ..



1

Możesz wypróbować wersję próbną programu RuntimeChecker lub wersję próbną produktu IBM Purify .

Bezpłatnym rozwiązaniem byłoby użycie następującego kodu w Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Po prostu napisz to na górze wszystkich plików CPP. Wykryje to wycieki pamięci z aplikacji po zatrzymaniu uruchamiania debugowania i wyświetli listę w oknie wyjściowym. Dwukrotne kliknięcie linii wycieków pamięci podświetli linię, w której pamięć jest przydzielana i nigdy nie zwalniana. To może ci pomóc: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.