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.

Kaczor
źródło
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:

orip
źródło
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

Lailin Chen
źródło
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

Dan Kegel
źródło
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/ .

tgs_stdio
źródło
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

dmityugov
źródło
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 ++
Satbir
źródło
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


źródło
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.

Jasper Bekkers
źródło
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.

Manuel
źródło
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.

Patrick Mankiet
źródło
3

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

Alex Budovski
źródło
3

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

zr.
źródło
3

Co powiesz na Purify ?

Grigy
źródło
Nie za darmo ... ale myślę, że możesz znaleźć licencję testową do celów testowych.
David Rodríguez - dribeas
Martwy link na dzień 02.02.2011 dla BoundsChecker.
dwj
2

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

Vince
źródło
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.

RED SOFT ADAIR
źródło
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
2

Najlepszym narzędziem, jakiego kiedykolwiek użyłem, jest DevPartner BoundsChecker - nie jest darmowy, ale ma okres próbny .

Dror Helper
źródło
2

Kolejne narzędzie pamięci dla twojej listy: Memory Validator .

Nie za darmo, ale nigdzie nie tak drogo jak Purify czy Boundschecker.

Stephen Kellett
źródło
2

Właśnie uzupełniamy narzędzie do sprawdzania bezpieczeństwa pamięci dla systemu Windows, które obsługuje GCC i Micrsoft Visual C (jeszcze nie C ++) i szukamy wersji beta.

EDYCJA 12 czerwca 2011: Już nie Beta, teraz produkcja dla GCC i Microsoft Visual Studio C.

Ira Baxter
źródło
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 ..

Czerwony
źródło
1

Możesz przeczytać, co robi Mozilla w zakresie wycieków pamięci. Jednym z narzędzi w przyborniku jest pojemnik na śmieci Hans Boehm wykorzystywany jako wykrywacz wycieków pamięci.

Cristian Adam
źródło
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

Patrice Bernassola
źródło