Qual estratégia você usa ao rastrear um problema relacionado à memória? Quais ferramentas você usa (de código aberto e proprietário) para identificar vazamentos de memória, corrupção de memória etc.? Como você rastrearia vazamentos de memória se apenas o gdb / dbx estivesse disponível em um sistema?
Para mim, consertar vazamentos de memória com apenas um depurador é muito difícil.
debugging
memory-leaks
Hemant
fonte
fonte
Respostas:
Se você pode alterar o código fonte, o Dmalloc é ótimo; ele listará quais ponteiros não foram liberados e (para código criado com símbolos de depuração) exatamente em qual linha eles foram alocados.
Se você não pode, Valgrind é praticamente o padrão para esse tipo de coisa. Geralmente, acho o Valgrind um pouco mais difícil de usar, mas possui muito mais recursos e não envolve a adição de chamadas dmalloc ao seu código
fonte
Valgrind é incrivelmente útil.
fonte
O maciço (da valgrind) é uma das melhores maneiras de encontrar vazamentos de memória. Repita seu código suspeito (ou execute seu programa por tempo suficiente) e despeje o resultado com ms_print. Normalmente, a pilha de chamadas fornece informações suficientes para corrigi-la.
Com o GDB, você pode tentar se conectar a um programa em execução e chamar funções como
malloc_stats()
Se o seu programa for escrito em um idioma diferente, pode ser mais complicado. Recentemente, alguns GDB ganharam capacidade de script e as pessoas começaram projetos interessantes como o gdb-heap , que pode analisar a memória Python a partir de um dump principal. Scripts de análise de memória semelhantes podem ser possíveis para objetos C ++.
Leia também /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
fonte
Para o Solaris, há várias ferramentas listadas nas respostas a esta pergunta do StackOverflow (elas incluem verificação de vazamento com outras formas de acesso ruim à memória).
fonte
Eu pratico o Objective-C há algum tempo, e há um analisador que lida com o gerenciamento de memória no nível C e coisas assim. O Clang Static Analyzer é tão bom que a Apple decidiu empacotá-lo com o xCode IDE. Não tenho certeza se isso é bom para sua pergunta, mas se você estiver fazendo C, vale a pena tentar.
fonte