Pergunta

Existem falsos positivos conhecidos com Valgrind? Eu recebo um 'salto condicional ou movimento depende do valor uninitialised (s)' com a função fmemopen, escrevendo em C e compilar com GCC. Eu posso ter certeza que é real?

EDIT: Há questões que não estão nos arquivos de supressão conhecido? Há algumas coisas que podemos fazer em um programa, que não são realmente erros mas Valgrind vai dizem que são? Se existem problemas conhecidos, uma lista seria bom.

Foi útil?

Solução

Sim, existem falsos positivos com Valgrind, é por isso que tem arquivos de supressão para determinadas versões glibc e GCC, por exemplo. Os falsos positivos podem surgir se você estiver usando valgrind mais antigo com mais recente gcc e glibc, ou seja, valgrind 3.3 com glibc 2.9.

Dito isso, você ainda tem que olhar para questão e descobrir se ele é realmente um falso positivo (se isso acaba por ser o caso, você pode escrever uma supressão por ele mesmo) ou é um bug real em seu programa.

Não há nenhuma maneira rápida e fácil de dizer o que está acontecendo aqui, mas neste caso eu suspeito que você está passando o valor não inicializado do seu código para o código da biblioteca. Tente Valgrind opção --track-origins=yes. Ela vai mostrar onde o valor não inicializado veio. Se é o seu código, provavelmente você deve inicializar-lo. Se for biblioteca dentro, ele poderia ser o falso positivo, ou, ainda, maus valores de argumentos de chamada de biblioteca pode estar causando isso, de modo a verificar os.

Outras dicas

Valgrind vem com alguma supressão de erro padrão, mas eles não são de forma cobrindo todas as bibliotecas.

As ferramentas de verificação de erros detectar inúmeros problemas nas bibliotecas de base, tais como a biblioteca GNU C, e as bibliotecas do cliente X11, que vêm pré-instalados em seu sistema GNU / Linux. Você não pode facilmente corrigir isso, mas você não quer ver estes erros (e sim, há muitos!) Então Valgrind lê uma lista de erros para suprimir na inicialização. Um arquivo de supressão padrão é criado pelo script ./configure quando o sistema é construído.

Você pode criar seu próprio supressões de erro que você sabe são irrelevantes para o seu código.

Não era a coisa Debian SSL motivado por corrigir alguns falsos positivos com Valgrind?

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