Ferramentas para encontrar corrupção de memória em código C++ gerenciado?
-
09-06-2019 - |
Pergunta
Eu tenho um aplicativo .NET que usa uma biblioteca de compactação C++ de código aberto para compactar imagens.Estamos acessando a biblioteca C++ por meio de C++ gerenciado.Estou vendo corrupção de heap durante a compactação.Uma chamada para _CrtIsValidHeapPointer está encontrando um erro em uma chamada para free() ao limpar após a compactação.
Minha pergunta é: existem ferramentas como o Purify para ajudar a diagnosticar esse problema e o que está causando a corrupção do heap ao trabalhar em uma combinação de código gerenciado e não gerenciado?Eu tenho a exceção detectada no depurador, mas seria bom ter outras ferramentas para ajudar a encontrar a solução para o problema.
Solução
No código nativo, se a corrupção sempre ocorrer no mesmo local da memória, você poderá usar um ponto de interrupção de dados para quebrar o depurador quando essa memória for alterada.Infelizmente, você não pode definir um ponto de interrupção de dados no ambiente C++ gerenciado, provavelmente porque o GC poderia mover o objeto na memória.
Não tenho certeza se isso ajuda, mas espero que isso o leve na direção certa.
Outras dicas
no *nix, existe uma ferramenta chamada valgrind que uso para lidar com problemas de memória, como vazamentos e corrupção de memória.
Rational Purify para Windows suporta .NET, então acho que isso poderia ser usado?