Я шукав Valgrind, щоб допомогти покращити моє C / відлагодження, коли виявив, що це тільки для Linux - у мене немає ніякої іншої потреби чи інтересу в переході ОС на Linux, тому мені було цікаво, чи є однаково хороша програма для Windows.
Я шукав Valgrind, щоб допомогти покращити моє C / відлагодження, коли виявив, що це тільки для Linux - у мене немає ніякої іншої потреби чи інтересу в переході ОС на Linux, тому мені було цікаво, чи є однаково хороша програма для Windows.
Відповіді:
Ще кілька хороших комерційних інструментів:
Як вказував jakobengblom2, у valgrind є костюм інструментів. Залежно від того, про який ви говорите, існують різні частини лічильника вікон. Тут я згадаю лише ОСО або безкоштовні інструменти.
1. MemCheck:
Доктор Пам'ять. Це відносно новий інструмент, він дуже добре працює в Windows 7. Моя улюблена особливість полягає в тому, що він групує ті самі стеки розподілу витоків у звіті.
http://code.google.com/p/drmemory/
Я також використовував UMDH ( http://support.microsoft.com/kb/268343 ) і вважав це тихо корисним та простим у налаштуванні. Він працює від Win2000 до Win7.
AppVerifier - це обов'язковий пристрій swissknife для розробників рідного коду Windows, його "пам’ять" перевіряє аналогічну роботу http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2. Виклик:
Мій улюблений - verysleepy ( http://www.codersnotes.com/sleepy ) Він крихітний, але дуже корисний і простий у використанні.
Якщо вам потрібні додаткові функції, аналізатор продуктивності AMD CodeAnalyst ™ безкоштовний: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Інструменти аналізу продуктивності Windows безкоштовні від Microsoft, не дуже прості у використанні, але можуть виконати роботу, якщо ви готові витратити час. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Завантажити: http://msdn.microsoft.com/en-us/performance / cc752957
3. Масив:
Подібні (не зовсім точні відповіді) безкоштовні інструменти для Windows:
VMMap від sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533
команда heap у windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Кешгринд:
Вищезазначені Інструменти продуктивності Windows мають певний рівень кешу L2, пропускають можливості профілювання, але не настільки ж хороші та прості у використанні, як Cachegrind.
5. DRD:
У Windows ще не знайдено нічого вільного та найпотужнішого, єдиний безкоштовний інструмент для Windows, який я можу виявити, що є трохи близьким, - це "перевірка" блокування в AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx
Чому б не використовувати Valgrind + Wine для налагодження програми для Windows? Дивіться http://wiki.winehq.org/Wine_and_Valgrind
(Chromium використовує це для перевірки версії Windows на наявність помилок пам’яті; див. Build.chromium.org і дивись на експериментальні чи водоспади пам’яті та шукає вино.)
Також є доктор Пам’ять, див. Dynamorio.org/drmemory.html
Для Visual C ++ спробуйте детектор витоку візуального . Коли я користувався ним, він виявив витік пам'яті під час new
виклику та повернув фактичну лінію у вихідний код витоку. Останню версію можна знайти на веб-сайті http://vld.codeplex.com/ .
Середовище розробки для Windows, яке ви використовуєте, може містити власні інструменти. Наприклад, Visual Studio дозволяє виявляти та ізолювати витоки пам'яті у ваших програмах
Я хотів би перерахувати якийсь інструмент, сподіваюся, буде корисним
читайте цю статтю для більш детальної інформації
Є Pageheap.exe частина інструментів налагодження для Windows. Це безкоштовно і, в основному, призначений для розподілення / угоди оператор пам'яті.
gflags
+ gdb
(від mingw) корисним для діагностики.
У поєднанні з Visual Studio я, як правило, використовую Visual Leak Detector або просто _CrtDumpMemoryLeaks (), який є викликом win32 api. Обидва нічого не фантазують, але вони виконують роботу.
У мене був шанс використовувати Compuware DevPartner Studio в минулому, і це було дуже добре, але це досить дорого. Більш дешевим рішенням може бути GlowCode , я просто працював з версією 5.x, і, незважаючи на деякі проблеми з приєднанням до процесу, який мені потрібен для налагодження, він працював досить добре.
Я люблю Memory Validator від компанії, що називається Software Verification.
Viusual Studio може допомогти виявити витоки пам'яті. Див. Підказки та рекомендації Microsoft Visual C ++ -> "Витік пам'яті". Дивіться також цю публікацію в SO
Хоча справжнє відстеження можливо лише за допомогою Team Edtion Visual Studio.
Перегляньте посилання " Інструменти перевірки джерел " на сторінці Тестування програмного забезпечення та ресурсів тестування програмного забезпечення для переліку подібних інструментів.
Раніше я використовував BoundsChecker, DevPartner Studio та Intel V-Tune для профілювання. Найкраще мені сподобався V-Tune; Ви можете імітувати різні набори мікросхем Intel, і це дасть вам підказки щодо оптимізації для цієї платформи.
Чи кваліфікується детектор витоку пам'яті Йохена Кальмбаха ?
PS: URL-адреса до останньої версії захована десь у темі коментарів до статті.
LeakDiag, UMDH, App Verifier, DebugDiag - це всі корисні інструменти для поліпшення надійності коду та пошуку витоків пам'яті.
Як щодо очищення ?
Спробуйте продукт Intel Inspector XE, який може допомогти вам виявити як проблеми з пам'яттю, так і з потоками потоків: http://software.intel.com/en-us/articles/intel-inspector-xe/
Можливо, CodeSnitch буде чимось, за чим ви хочете? http://www.entrek.com/codesnitch.html
Більш-менш всі профілі включають перевірку на наявність витоків пам’яті та показують стек, коли було виділено пам'ять.
Я можу порекомендувати паралельний інспектор Intels . Проста у використанні і не потрібна перекомпіляція. Пробна версія триває 30 днів.
GlowCode та AtromatedQA також включають такі можливості. Усі вони пропонують безкоштовні випробування.
Compuware DevPartner (він же BoundsChecker) в Contrast потребує сповільненої перекомпіляції "приладобудування", а програма також працює повільніше при перевірці помилок. І BoundsChecker взагалі не може працювати з 64 бітовими evsrions. Ми відмовилися від цього інструменту.
Найкращий інструмент, який я коли-небудь використовував, - це DevPartner BoundsChecker - це не безкоштовно, але він має період оцінки.
Ще один інструмент пам’яті для вашого списку: перевірка пам’яті .
Не безкоштовно, але ніде не так дорого, як Purify або Boundschecker.
Якщо ви не боїтеся mingw, ось кілька посилань (деякі можуть працювати з MSVC) ... http://betterlogic.com/roger/?p=1140
Ми лише закінчуємо інструмент перевірки безпеки пам’яті для Windows, який обробляє GCC та Micrsoft Visual C (ще не C ++) і шукає бета-тестери.
EDIT 12 червня 2011: Більше не бета-версія, тепер виробництво для GCC та Microsoft Visual Studio C.
Я знайшов цей проект SF сьогодні:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Вони переносять вальгринд до Windows. Ймовірно, через кілька років у нас з’явиться надійний вальд на вікнах.
Ознайомтеся з цим питанням: чи є хороша заміна Valgrind для Windows? . Хоча просять загальну заміну вальгрингу, він в основному обговорює детектори витоку пам'яті, а не виявлення умов гонки.
Я використовував Insure ++, що робить відмінну роботу в пошуку витоків / пошкоджень пам'яті c ++ та багатьох інших помилок, таких як неініціалізовані змінні, помилки вказівника, рядки тощо. Це також робить візуальне "покриття коду" та використання часу пам'яті тощо. свій код .. Ви можете спробувати його для версії сліду ..
Ви можете прочитати, що робить Mozilla щодо витоків пам'яті. Одним із інструментів у їх наборі інструментів є смітник Hans Boehm, який використовується як детектор витоку пам'яті.
Ви можете спробувати пробну версію RuntimeChecker від пробної версії IBM Purify ..
Безкоштовним рішенням буде використання наступного коду у Visual Studio:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Просто напишіть це вгорі всіх ваших файлів cpp. Це дозволить виявити витоки пам’яті у вашій програмі при зупинці запуску налагодження та перелічить їх у вікні виводу. Подвійне клацання по лінії витоку пам’яті висвітлить вам рядок, де пам'ять розподіляється та ніколи не звільняється. Це може допомогти вам: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml