Инструменты для обнаружения повреждения памяти в управляемом коде C ++? - PullRequest
2 голосов
/ 29 августа 2008

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

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

Ответы [ 3 ]

1 голос
/ 29 августа 2008

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

1 голос
/ 29 августа 2008

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

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

0 голосов
/ 29 августа 2008

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

...