Существует ли хорошая замена Valgrind для Windows?

@ martijn-pieters Я не знаю, имеет ли список в python2 __cmp__ для обработки сопоставления объектов списка или того, как он обрабатывался в python2.

В любом случае, помимо @ Ответ martijn-pieters , я использовал следующий компаратор списка, поэтому, по крайней мере, он не дает разного сортированного вывода, основанного на разном порядке элементов в одном и том же наборе.

@per_type_cmp(list) def list_cmp(a, b): for a_item, b_item in zip(a, b): if a_item == b_item: continue return python2_sort_key(a_item) < python2_sort_key(b_item) return len(a) < len(b)

Итак, присоединившись к нему с оригинальным ответом Martijn:

from numbers import Number


# decorator for type to function mapping special cases
def per_type_cmp(type_):
    try:
        mapping = per_type_cmp.mapping
    except AttributeError:
        mapping = per_type_cmp.mapping = {}
    def decorator(cmpfunc):
        mapping[type_] = cmpfunc
        return cmpfunc
    return decorator


class python2_sort_key(object):
    _unhandled_types = {complex}

    def __init__(self, ob):
       self._ob = ob

    def __lt__(self, other):
        _unhandled_types = self._unhandled_types
        self, other = self._ob, other._ob  # we don't care about the wrapper

        # default_3way_compare is used only if direct comparison failed
        try:
            return self < other
        except TypeError:
            pass

        # hooks to implement special casing for types, dict in Py2 has
        # a dedicated __cmp__ method that is gone in Py3 for example.
        for type_, special_cmp in per_type_cmp.mapping.items():
            if isinstance(self, type_) and isinstance(other, type_):
                return special_cmp(self, other)

        # explicitly raise again for types that won't sort in Python 2 either
        if type(self) in _unhandled_types:
            raise TypeError('no ordering relation is defined for {}'.format(
                type(self).__name__))
        if type(other) in _unhandled_types:
            raise TypeError('no ordering relation is defined for {}'.format(
                type(other).__name__))

        # default_3way_compare from Python 2 as Python code
        # same type but no ordering defined, go by id
        if type(self) is type(other):
            return id(self) < id(other)

        # None always comes first
        if self is None:
            return True
        if other is None:
            return False

        # Sort by typename, but numbers are sorted before other types
        self_tname = '' if isinstance(self, Number) else type(self).__name__
        other_tname = '' if isinstance(other, Number) else type(other).__name__

        if self_tname != other_tname:
            return self_tname < other_tname

        # same typename, or both numbers, but different type objects, order
        # by the id of the type object
        return id(type(self)) < id(type(other))


@per_type_cmp(dict)
def dict_cmp(a, b, _s=object()):
    if len(a) != len(b):
        return len(a) < len(b)
    adiff = min((k for k in a if a[k] != b.get(k, _s)), key=python2_sort_key, default=_s)
    if adiff is _s:
        # All keys in a have a matching value in b, so the dicts are equal
        return False
    bdiff = min((k for k in b if b[k] != a.get(k, _s)), key=python2_sort_key)
    if adiff != bdiff:
        return python2_sort_key(adiff) < python2_sort_key(bdiff)
    return python2_sort_key(a[adiff]) < python2_sort_key(b[bdiff])

@per_type_cmp(list)
def list_cmp(a, b):
    for a_item, b_item in zip(a, b):
        if a_item == b_item:
            continue
        return python2_sort_key(a_item) < python2_sort_key(b_item)
    return len(a) < len(b)

PS: У него больше смысла создавать его в качестве комментария, но у меня не было достаточной репутации, чтобы сделать комментарий. Поэтому я создаю это как ответ.

210
задан KindDragon 21 April 2012 в 09:47
поделиться

29 ответов

Некоторые более хорошие коммерческие инструменты:

29
ответ дан orip 23 November 2019 в 04:36
поделиться

Среда разработки для Windows, который Вы используете, может содержать свои собственные инструменты. Visual Studio, например, позволяет, Вы обнаруживаете и изолируете утечки памяти в Ваших программах

14
ответ дан dmityugov 23 November 2019 в 04:36
поделиться

Возможно, CodeSnitch был бы чем-то, что Вы после? http://www.entrek.com/codesnitch.html

2
ответ дан GEOCHET 23 November 2019 в 04:36
поделиться

Я любил Блок проверки допустимости Памяти от компании, названной Проверкой программного обеспечения.

6
ответ дан stevex 23 November 2019 в 04:36
поделиться

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

6
ответ дан Manuel 23 November 2019 в 04:36
поделиться

Посмотрите" Исходные Инструменты тестирования " ссылка на странице QA Testing и Test Tool Resources программного обеспечения для списка подобных инструментов.

я использовал BoundsChecker, DevPartner Studio и Intel V-Tune in прошлое для профилирования. Мне понравилась V-мелодия лучшее; Вы могли эмулировать различные наборы микросхем Intel, и это даст Вам подсказки, как оптимизировать для той платформы.

4
ответ дан Patrick Cuff 23 November 2019 в 04:36
поделиться

Pageheap.exe входит в состав средств отладки для Windows. Это бесплатно и в основном пользовательский распределитель / освобождение памяти.

См. http://support.microsoft.com/kb/286470

12
ответ дан 23 November 2019 в 04:36
поделиться

Если вы разрабатываете с помощью Borland / CodeGear / Embarcadero C ++ Builder, вы можете использовать CodeGuard.

2
ответ дан 23 November 2019 в 04:36
поделиться

Попробуйте DUMA

13
ответ дан 23 November 2019 в 04:36
поделиться

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

15
ответ дан 23 November 2019 в 04:36
поделиться

Check out this question: Is there a good Valgrind substitute for Windows? . Though general substitute for valgrind is asked, it mainly discusses memory leak detectors and not race conditions detections.

1
ответ дан 23 November 2019 в 04:36
поделиться

I used Insure++ which does excellent job in finding c++ memory leaks/corruptions and many other bugs like uninitialized variables, pointer errors, strings etc., It also does visual "Code coverage" and run time memory usage etc.. which give more confident on your code.. You can try it for trail version..

1
ответ дан 23 November 2019 в 04:36
поделиться

More or less all Profilers include checking for memory leaks and show you the stack when the memory was allocated.

I can recommend Intels Parallel Inspector. Simple to use and no recompilation needed. The trial version runs for 30 days.

GlowCode and AtromatedQA also include such capabilites. They all offer free trials.

Compuware DevPartner (aka BoundsChecker) in Contrast needs a slowed down "instrumentation" recompile and the application also runs slower when checking for errors. And BoundsChecker can not work with 64 Bit evsrions at all. We gave up on that tool.

2
ответ дан 23 November 2019 в 04:36
поделиться

Вы можете прочитать, что Mozilla делает в отношении утечек памяти. Одним из инструментов в их наборе инструментов является сборщик мусора Ганса Боэма, используемый в качестве детектора утечек памяти.

1
ответ дан 23 November 2019 в 04:36
поделиться

Вы можете попробовать пробную версию RuntimeChecker или пробную версию IBM Purify ..

Бесплатным решением будет использование следующего кода в Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Просто напишите это в верхней части всех ваших файлов cpp. This will detect memory leaks of your application whenc stopping debug run and list them in the output window. Double clicking on a memory leaks line will higlight you the line where memory is allocated and never released. This may help you : http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

1
ответ дан 23 November 2019 в 04:36
поделиться

Лучший инструмент, который я когда-либо использовал, - это DevPartner BoundsChecker - он платный, но у него есть пробный период.

2
ответ дан 23 November 2019 в 04:36
поделиться

Я хотел бы перечислить некоторые инструменты, надеюсь, они будут полезны

прочтите эту статью для более подробной информации

  1. Purify
  2. Bounds Checker
  3. Coverity (в основном это анализатор кода, но он будет обнаруживать утечку памяти в статике)
  4. Glow Code
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Insure ++
14
ответ дан 23 November 2019 в 04:36
поделиться

Viusual Studio может помочь обнаружить утечки памяти самостоятельно. См. Советы и приемы Microsoft Visual C ++ -> раздел «Утечки памяти». See also this post in SO

Although real tracing is only possible with the Team Edtion of Visual Studio.

5
ответ дан 23 November 2019 в 04:36
поделиться

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

8
ответ дан 23 November 2019 в 04:36
поделиться

Как насчет Purify ?

3
ответ дан 23 November 2019 в 04:36
поделиться

Почему не использовать Valgrind + Wine для отладки приложения Windows? Видеть http://wiki.winehq.org/wine_and_valgrind

(Chromium использует это для проверки версии Windows для ошибок памяти; см. build.Chromium.org. И посмотрите на экспериментальные или память водопады и ищу вино.)

Там также доктор память, см. dynamorio.org/drmemory.html

30
ответ дан 23 November 2019 в 04:36
поделиться

Подходит ли Jochen Kalmbach's Memory Leak Detector?

PS: URL последней версии зарыт где-то в ветке комментариев статьи.

3
ответ дан 23 November 2019 в 04:36
поделиться

Еще один инструмент памяти для вашего списка: Memory Validator .

Не бесплатно, но далеко не так дорого, как Purify или Boundschecker.

2
ответ дан 23 November 2019 в 04:36
поделиться

LeakDiag, UMDH, App Verifier, DebugDiag - все это полезные инструменты для повышения надежности кода и поиска утечек памяти.

3
ответ дан 23 November 2019 в 04:36
поделиться

Библиотека Boost Test может обнаруживать утечки памяти.

3
ответ дан 23 November 2019 в 04:36
поделиться

Если вы не боитесь mingw, вот несколько ссылок (некоторые могут работать с MSVC)... http://betterlogic.com/roger/?p=1140

2
ответ дан 23 November 2019 в 04:36
поделиться

Definitely Purify! I've used that to analyze some massive code bases (>3,000 kSLOC) and found it to be excellent.

You might like to look at this list at Wikipedia.

By the way, I've found memwatch to be useful. Thanks Johan!

1
ответ дан 23 November 2019 в 04:36
поделиться

Утилита пользовательского режима кучи дампа (UMDH) работает с операционной системой для анализа распределения кучи Windows для определенного процесса. Это довольно хороший бесплатный инструмент от Microsoft. Здесь находится мини-учебник «Как использовать Umdh.exe для поиска утечек памяти».

1
ответ дан 23 November 2019 в 04:36
поделиться

Бесплатная утилита DebugDiag поможет найти память и обработать утечки.

Для работы DebugDiag не нужно расширять программу.

http://www.microsoft.com/downloads/details.aspx?FamilyID=28BD5941-C458-46F1-B24D-F60151D875A3&displaylang=en

Хотя это не самая простая и интуитивно понятная программа! Обязательно найдите в Google учебные пособия и инструкции по его использованию.

1
ответ дан 23 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: