Wykrywacze wycieków pamięci dla C?

Z jakimi czujnikami wycieku pamięci ludzie mieli dobre doświadczenia?

Oto podsumowanie dotychczasowych odpowiedzi:

Valgrind - Instrumentation framework for building dynamic analysis tools.

Ogrodzenie elektryczne - narzędzie współpracujące z GDB

Splint - Annotation-Assisted Lightweight Static Checking

Glow Code - jest to kompletny Profiler wydajności i pamięci w czasie rzeczywistym dla programistów Windows i. NET, którzy tworzenie aplikacji z wykorzystaniem C++, C# lub dowolnego. NET Framework

Zobacz również ten poststackoverflow .

Author: lillq, 2008-09-10

17 answers

 17
Author: nlucaroni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 05:01:09

Valgrind pod Linuksem jest dość dobry; nie mam doświadczenia pod Windowsem z tym.

 11
Author: hazzen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 19:07:10

IBM Rational Purify to niezwykle wydajny w branży detektor wycieków pamięci i uszkodzeń pamięci dla języków C / C++. Istnieje dla Systemów Windows, Solaris i Linux. Jeśli jesteś tylko Linuksem i chcesz taniego rozwiązania, wybierz Valgrind.

 3
Author: Thorsten79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 21:37:19

Mudflap dla gcc! To faktycznie kompiluje kontrole do pliku wykonywalnego. Wystarczy dodać

-fmudflap -lmudflap

Do Waszych FLAG gcc.

 3
Author: Artelius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 01:15:04

Lint (bardzo podobne narzędzie open-source o nazwie splint)

 2
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 18:39:15

Warto również użyć, jeśli jesteś na Linuksie używając glibc jest wbudowany kod sterty debugowania. Aby go użyć, połącz się z -lmcheck lub zdefiniuj (i wyeksportuj) zmienną środowiskową MALLOC_CHECK_ o wartości 1, 2 lub 3. podręcznik glibc zawiera więcej informacji.

Ten tryb jest najbardziej przydatny do wykrywania podwójnych frees i często znajduje zapisy poza przydzielonym obszarem pamięci podczas wykonywania wolnego. Nie wydaje mi się, żeby raport wyciekł z pamięci.

 2
Author: Ben Combee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-11 19:22:37

Miałem sporo trafień z cppcheck , który wykonuje tylko analizę statyczną. Jest open source i posiada interfejs wiersza poleceń (nie używałem go w żaden inny sposób).

 2
Author: Felix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 15:28:01

Bolesne, ale jeśli trzeba użyć jednego..
Polecam pakiet DevPartner BoundsChecker .. to jest to, co ludzie w moim miejscu pracy używają do tego celu. Płatne np.. nie freeware.

 2
Author: Gishu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-11 21:13:54

Uwielbiałem wykrywacze wycieków pamięci. Zazwyczaj jest zbyt wiele fałszywych alarmów, aby mogły być użyte. Polecam te dwie jako najmniej natrętne:

GlowCode

Debug heap

 1
Author: 1800 INFORMATION,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 04:52:19

Do debugowania Win32 wycieków pamięci miałem bardzo dobre doświadczenia ze zwykłym starym debug Heap CRT, który pochodzi jako lib z Visual C.

W kompilacji Debugowej malloc (Et al) jest ponownie zdefiniowany jako _malloc_dbg (et al) i istnieją inne wywołania do pobierania wyników, które są niezdefiniowane, jeśli _DEBUG nie jest ustawiony. Ustawia na stercie wszelkiego rodzaju strażników granicznych i pozwala w każdej chwili zdeponować wyniki.

Miałem kilka fałszywych alarmów, kiedy byłem witting jakiś czas procedury, które namieszały w przydzielaniu czasu pracy biblioteki, dopóki nie odkryłem _CRT_BLOCK.

Musiałem najpierw wyprodukować DOS, potem konsolę Win32 i usługi, które będą działać wiecznie. Z tego co wiem nie ma wycieków pamięci, a w co najmniej jednym miejscu kod działał przez dwa lata bez nadzoru, zanim monitor na komputerze zawiódł (choć komputer był w porządku!).

 1
Author: David L Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-11 04:25:26

W systemie Windows użyłem wizualnego wykrywacza nieszczelności. Integruje się z VC++, łatwy w użyciu (wystarczy dołączyć nagłówek i ustawić LIB, aby znaleźć lib), open source, free to use FTW.

 1
Author: Chris Morley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-17 03:14:06

Na Uniwersytecie kiedy robiłem większość rzeczy pod Uniksem Solaris używałem gdb .

Jednak wybrałbym valgrind pod Linuksem.

 0
Author: Marcel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 05:46:47

Dziadkiem tych narzędzi jest komercyjne, zamknięte Źródło Purify narzędzie, które zostało sprzedane do IBM, a następnie do UNICOM

Parasoft Insure++ (instrumentacja kodu źródłowego) i valgrind (open source) są dwoma innymi prawdziwymi konkurentami.

Ciekawostki: oryginalny autor Purify, Reed Hastings, udał się do Netflix.

 0
Author: djsadinoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-07 05:40:10

Nikt nie wspomniał clang ' s MSan , który jest dość potężny. Jest jednak oficjalnie wspierany tylko na Linuksie.

 0
Author: arrowd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-07 05:47:13

To pytanie może stare, ale i tak na nie odpowiem - może moja odpowiedź pomoże komuś znaleźć wycieki pamięci.

To mój własny projekt-umieściłem go jako kod open source:

Https://sourceforge.net/projects/diagnostic/

Obsługiwane są platformy Windows 32 i 64-bitowe, pakiety połączeń w trybie natywnym i mieszanym.

. NET garbage collection nie jest obsługiwany. (C++ cli ' s gcnew or C#'s new)

To narzędzie o wysokiej wydajności i nie wymagaj jakiejkolwiek integracji (chyba że naprawdę chcesz ją zintegrować).

Kompletny podręcznik znajduje się tutaj:

Http://diagnostic.sourceforge.net/index.html

Nie bój się, jak bardzo to rzeczywiście wykrywa przecieki to twój proces. Wychwytuje wycieki pamięci z całego procesu. Analizuj tylko największe przecieki, nie wszystkie.

 0
Author: TarmoPikaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 17:43:39

Będę drugim valgrind jako zewnętrzne narzędzie do wycieków pamięci.
Ale do większości problemów, które musiałem rozwiązać, zawsze używałem wewnętrznie zbudowanych narzędzi. Czasami narzędzia zewnętrzne mają zbyt duże obciążenie lub są zbyt skomplikowane do skonfigurowania.

Po co używać już napisanego kodu, skoro można napisać własny:)

Żartuję, ale czasem trzeba coś prostego i szybciej napisać to samemu. Zwykle zamieniam wywołania malloc () i free() na funkcje, które zachowują lepiej śledzenie, kto przydziela co. Większość moich problemów wydaje się, że ktoś zapomniał uwolnić, a to pomaga rozwiązać ten problem.

To naprawdę zależy od tego, gdzie jest wyciek, a gdybyś o tym wiedział, nie potrzebowałbyś żadnych narzędzi. Ale jeśli masz jakiś wgląd w to, gdzie myślisz, że przecieka, to włóż własne oprzyrządowanie i sprawdź, czy ci to pomoże.

 -1
Author: Alan H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 18:38:42

Nasze CheckPointer Narzędzie Może to zrobić dla GNU C 3/4 I, MS dialektów C i GreenHills C. może znaleźć problemy z zarządzaniem pamięcią, których Valgrind nie może.

Jeśli Twój kod po prostu wycieka, po wyjściu CheckPointer powie Ci, gdzie przydzielono całą nieoczyszczoną pamięć.

 -1
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-26 07:36:52