Инструменты для обнаружения повреждения памяти в управляемом коде C ++?

StackOverflow https://stackoverflow.com/questions/34973

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть приложение .NET, которое использует библиотеку сжатия C ++ с открытым исходным кодом для сжатия изображений. Мы обращаемся к библиотеке C ++ через управляемый C ++. Я вижу повреждение кучи во время сжатия. Вызов _CrtIsValidHeapPointer находит ошибку при вызове free () при очистке после сжатия.

Мой вопрос: существуют ли такие инструменты, как Purify, для диагностики этой проблемы, и что вызывает повреждение кучи при работе в сочетании управляемого и неуправляемого кода? У меня есть исключение, пойманное в отладчике, но было бы неплохо иметь другие инструменты, которые помогут найти решение проблемы.

Это было полезно?

Решение

В собственном коде, если повреждение всегда происходит в одном и том же месте в памяти, вы можете использовать точка останова данных , чтобы отключить отладчик при изменении этой памяти. К сожалению, вы не можете установить точку останова данных в управляемой среде C ++, возможно потому, что GC может перемещать объект в памяти.

Не уверен, поможет ли это, но, надеюсь, это приведет вас в правильном направлении.

Другие советы

в * nix есть инструмент под названием valgrind , который я использую для решения проблем с памятью, таких как утечки памяти и повреждение памяти.

Rational Purify для Windows поддерживает .NET, поэтому я угадайте, что можно использовать?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top