Ferramentas para encontrar corrupção de memória em código C++ gerenciado?

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

  •  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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top