Чи є хороша заміна Valgrind для Windows?


210

Я шукав Valgrind, щоб допомогти покращити моє C / відлагодження, коли виявив, що це тільки для Linux - у мене немає ніякої іншої потреби чи інтересу в переході ОС на Linux, тому мені було цікаво, чи є однаково хороша програма для Windows.


Які налагодження ви шукаєте? Valgrind - це досить багатий набір інструментів, а відповіді нижче вказують на всілякі напрямки. З акцентом на налагодження витоку / розподілу пам'яті.
jakobengblom2

1
Можливо, ви можете протестувати код на віртуальній машині Linux всередині вашої Windows, саме тоді, коли вам потрібно це перевірити. ви можете поділитися папкою розробки між віртуальною та невіртуальною машиною. тобто, якщо код достатньо портативний.
Ліран Ореві

Відповіді:


29

Ще кілька хороших комерційних інструментів:


1
Очистити: поважно, але все-таки корисно, про що свідчить, скільки змін корпоративного права пережило!
Норман Рамзі

2
Застрахувати ++ потрібно назавжди, щоб інструментувати свій код і назавжди виконувати його під час виконання.
C Джонсон

117

Як вказував 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


2
Також є gperftools (раніше Google PerfTools) . Це не заміна valgrind (що це насправді), але у нього є новий malloc, процесорний процесор, купи профілю та шашка. Варто ознайомитися, оскільки це підтримка для Linux та Windows (включаючи Mingw) та інших уніцій.
alexr

30

Чому б не використовувати Valgrind + Wine для налагодження програми для Windows? Дивіться http://wiki.winehq.org/Wine_and_Valgrind

(Chromium використовує це для перевірки версії Windows на наявність помилок пам’яті; див. Build.chromium.org і дивись на експериментальні чи водоспади пам’яті та шукає вино.)

Також є доктор Пам’ять, див. Dynamorio.org/drmemory.html


3
Тому що тоді ви не налагодите додаток для Windows - ви налагодите додаток Linux.
Джон Дайлінг

33
Не потрібно перекомпілювати у Wine. Просто перенесіть ваші .exe та .pdb у вікно Linux. І ви б не налагоджували додаток Linux; ви налагоджуєте точну програму Windows.
Дан Кегель

2
Точніше, краще використовувати справжню річ, ніж кульгавий клон: D Love valgrind.
альтернатива

11
Приємно! З Windows можна запустити віртуальну машину під управлінням Linux, запустивши програмне забезпечення у майже vm wine, у valgrind vm. Бонусні бали, якщо Windows запускається з vm, що працює під Linux, всередині Windows vm :)
Imbrondir

15

Для Visual C ++ спробуйте детектор витоку візуального . Коли я користувався ним, він виявив витік пам'яті під час newвиклику та повернув фактичну лінію у вихідний код витоку. Останню версію можна знайти на веб-сайті http://vld.codeplex.com/ .


Здається, це не працює для мене. Я навіть спробував створити простий проект, який в основному не мав нічого іншого, крім виділення деякої пам’яті та не звільнення її. VLD цього не виявив. : - |
Synetech

@Synetech вкл. У мене була така ж проблема і у VS2010 ... Використання найновішої версії VLD вирішило мою проблему
relaxxx

14

Середовище розробки для Windows, яке ви використовуєте, може містити власні інструменти. Наприклад, Visual Studio дозволяє виявляти та ізолювати витоки пам'яті у ваших програмах


6
Це дуже мало практичного використання. Він записує ім'я файлу / номер доменних файлів для порушення розподілу, але він лише інформативний, якщо ви зателефонуєте malloc безпосередньо. Під час використання нового / видалення він недобросовісно визначить new.h як "ображаючий" код.
користувач9665

3
Для мене це працює правильно, вказуючи на правильну лінію, навіть використовуються нові / видалення.
Родріго

Але чи спрацює, якщо виділити функцію бібліотеки? Наприклад, strdup.
Олексій Будовський

1
Valdrind набагато більше, ніж знаходити витоки пам’яті, я в основному використовую його для пошуку звільненої та неініціалізованої пам’яті стека та купи, яку в іншому випадку важко налагодити.
ideaman42

1
@ user9665 Візуальний детектор витоку ( vld.codeplex.com ) забезпечує повний стек виклику для кожного витоку пам'яті з мінімальними змінами коду souce . Перевірте приклад на сайті
KindDragon

14

Я хотів би перерахувати якийсь інструмент, сподіваюся, буде корисним

читайте цю статтю для більш детальної інформації

  1. Очистити
  2. Перевірка меж
  3. Покритість (в основному це аналізатор коду, але він вловлює витік пам'яті в статичному стані)
  4. Glow Code
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Страхувати ++


12

Є Pageheap.exe частина інструментів налагодження для Windows. Це безкоштовно і, в основному, призначений для розподілення / угоди оператор пам'яті.

Див. Http://support.microsoft.com/kb/286470


Pageheap / gflags допомогли мені дійти до низу деяких неприємних проблем з корупцією.
the_mandrill

Я знайшов gflags+ gdb(від mingw) корисним для діагностики.
Jarekczek

8

У поєднанні з Visual Studio я, як правило, використовую Visual Leak Detector або просто _CrtDumpMemoryLeaks (), який є викликом win32 api. Обидва нічого не фантазують, але вони виконують роботу.


6

У мене був шанс використовувати Compuware DevPartner Studio в минулому, і це було дуже добре, але це досить дорого. Більш дешевим рішенням може бути GlowCode , я просто працював з версією 5.x, і, незважаючи на деякі проблеми з приєднанням до процесу, який мені потрібен для налагодження, він працював досить добре.


Дорогий так. Це окупилося за один вихідний, просто використовуючи шматок профілю.
EvilTeach



4

Перегляньте посилання " Інструменти перевірки джерел " на сторінці Тестування програмного забезпечення та ресурсів тестування програмного забезпечення для переліку подібних інструментів.

Раніше я використовував BoundsChecker, DevPartner Studio та Intel V-Tune для профілювання. Найкраще мені сподобався V-Tune; Ви можете імітувати різні набори мікросхем Intel, і це дасть вам підказки щодо оптимізації для цієї платформи.



3

LeakDiag, UMDH, App Verifier, DebugDiag - це всі корисні інструменти для поліпшення надійності коду та пошуку витоків пам'яті.


3

Бібліотека Boost Test може виявити витоки пам'яті.





2

Якщо ви розробляєте програму Borland / CodeGear / Embarcadero C ++ Builder, ви можете використовувати CodeGuard.


2

Більш-менш всі профілі включають перевірку на наявність витоків пам’яті та показують стек, коли було виділено пам'ять.

Я можу порекомендувати паралельний інспектор Intels . Проста у використанні і не потрібна перекомпіляція. Пробна версія триває 30 днів.

GlowCode та AtromatedQA також включають такі можливості. Усі вони пропонують безкоштовні випробування.

Compuware DevPartner (він же BoundsChecker) в Contrast потребує сповільненої перекомпіляції "приладобудування", а програма також працює повільніше при перевірці помилок. І BoundsChecker взагалі не може працювати з 64 бітовими evsrions. Ми відмовилися від цього інструменту.


2
Я б точно рекомендував glowcode. Раніше я використовував це для пошуку витоку пам’яті всередині dll, що викликається моїм додатком.
Боб

Були скарги на значні уповільнення роботи під час використання DevPartner на моєму останньому робочому місці. Вони роблять усе, щоб не використовувати його через те, наскільки це буде повільно.
Calyth

2

Найкращий інструмент, який я коли-небудь використовував, - це DevPartner BoundsChecker - це не безкоштовно, але він має період оцінки.







1

Я використовував Insure ++, що робить відмінну роботу в пошуку витоків / пошкоджень пам'яті c ++ та багатьох інших помилок, таких як неініціалізовані змінні, помилки вказівника, рядки тощо. Це також робить візуальне "покриття коду" та використання часу пам'яті тощо. свій код .. Ви можете спробувати його для версії сліду ..



1

Ви можете спробувати пробну версію RuntimeChecker від пробної версії IBM Purify ..

Безкоштовним рішенням буде використання наступного коду у Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Просто напишіть це вгорі всіх ваших файлів cpp. Це дозволить виявити витоки пам’яті у вашій програмі при зупинці запуску налагодження та перелічить їх у вікні виводу. Подвійне клацання по лінії витоку пам’яті висвітлить вам рядок, де пам'ять розподіляється та ніколи не звільняється. Це може допомогти вам: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.