web-development-kb-pt.site

Como rastrear / corrigir um problema relacionado à memória em um grande código C / C / C ++ em sistemas * NIX

Qual estratégia você usa enquanto rastreia um problema relacionado à memória? Quais ferramentas você usa (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 gdb/dbx disponível em um sistema?

Para mim, corrigir vazamentos de memória com apenas um depurador é muito difícil.

9
Hemant

Se você puder alterar o código-fonte, dmalloc é ótimo; Ele listará quais ponteiros foram fretados e (para código construído com símbolos de depuração) exatamente qual linha eles foram alocados.

Se você não puder, Valgrind é praticamente o padrão para esse tipo de coisa. Eu geralmente acho valgrind um pouco mais difícil de usar, mas tem muito mais recursos e não envolve adicionar chamadas Dmalloc em seu código

12
Michael Mrozek

valgrind é incrivelmente útil.

7
jacksonh

Massif (de 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 está lhe dando informações suficientes para consertá-lo.

Com o GDB, você pode tentar anexar a um programa em execução e chamar funções como malloc_stats()

Se o seu programa é escrito em uma linguagem diferente, pode ser mais complicado. Recentemente, algum GDB ganhou scriptbability, e as pessoas começaram projetos interessantes como gdb-heap , que podem analisar Python Memória de um desejo principal. Os scripts de memória similar podem seja possível para objetos C++.

Leia também https://stackoverflow.com/questions/2564752/examining-c-c-heap-mememory-statistics-in-gdb

2
elmarco

Para o Solaris, há várias ferramentas listadas nas respostas a esta pergunta de filmagem (incluem verificação de vazamento com outras formas de acesso a memória ruim).

1
alanc

Eu tenho feito objetivo - c há algum tempo, e há um analisador que lida com o gerenciamento de memória de nível C e coisas assim. Clang Static Analyzer é tão bom que Apple Decidiu empurrá-lo com o seu Xcode IDE. Eu não tenho certeza se isso é bom para sua pergunta, mas se você é fazendo c, então vale a pena tentar.

1
phunehehe