Инструменты для обнаружения повреждения памяти в управляемом коде C ++?
-
09-06-2019 - |
Вопрос
У меня есть приложение .NET, которое использует библиотеку сжатия C ++ с открытым исходным кодом для сжатия изображений. Мы обращаемся к библиотеке C ++ через управляемый C ++. Я вижу повреждение кучи во время сжатия. Вызов _CrtIsValidHeapPointer находит ошибку при вызове free () при очистке после сжатия. Р>
Мой вопрос: существуют ли такие инструменты, как Purify, для диагностики этой проблемы, и что вызывает повреждение кучи при работе в сочетании управляемого и неуправляемого кода? У меня есть исключение, пойманное в отладчике, но было бы неплохо иметь другие инструменты, которые помогут найти решение проблемы.
Решение
В собственном коде, если повреждение всегда происходит в одном и том же месте в памяти, вы можете использовать точка останова данных , чтобы отключить отладчик при изменении этой памяти. К сожалению, вы не можете установить точку останова данных в управляемой среде C ++, возможно потому, что GC может перемещать объект в памяти.
Не уверен, поможет ли это, но, надеюсь, это приведет вас в правильном направлении.
Другие советы
в * nix есть инструмент под названием valgrind , который я использую для решения проблем с памятью, таких как утечки памяти и повреждение памяти.
Rational Purify для Windows поддерживает .NET, поэтому я угадайте, что можно использовать?