Existe uma maneira de mesclar dois arquivos .gcda em um?

9

Eu tenho vários testes de unidade para um aplicativo, cada um dos quais é capaz de gerar arquivos .gcda. Eu gostaria de poder gerar arquivos .gcda unificados que representam a cobertura da minha suíte de testes como um todo. Não parece ser uma maneira fácil de fazer isso, mas posso estar errado, e é por isso que estou perguntando.

Com o gcov, é possível mesclar para Os arquivos .gcda? foram perguntados anteriormente e a solução foi converter para lcov .info e mesclar dessa maneira. Se possível, gostaria que a saída da operação de mesclagem ainda fosse um único arquivo .gcda para que eu não fosse forçado a usar o lcov.

    
por Kanak 29.06.2011 в 00:01
fonte

2 respostas

4

Existe código para mesclar .gcda arquivos, mas infelizmente ele está enterrado em libgcov.a , que é construído como parte do gcc. Se você sair (ou de alguma forma invocar __gcov_flush() ) um programa compilado com cobertura, ele irá realmente detectar .gcda de arquivos preexistentes, carregá-los, agregar seus dados com os dados do programa em execução e salvá-los novamente. Não conheço nenhuma ferramenta que forneça essa funcionalidade na linha de comando. Mesmo com libgcov.a você provavelmente não tem ganchos úteis para fazer o que você quer e teria que pegar a fonte da distribuição gcc-core e modificá-la.

O que fiz no passado é apenas extrair todos os dados para a fonte anotada ( .gcov ) e agregar a esse nível. O formato .gcda é capaz de armazenar muito mais do que informações de cobertura de linha (por exemplo, contagens de ramificação) e a agregação libgcov.a sabe como combiná-las (para algumas, não é tão simples quanto um somatório).

    
por Ben Jackson 29.06.2011 / 00:18
fonte
1

Acabei de criar um projeto de teste que mostra, AFAIKT, que quando um único aplicativo de teste é executado sucessivamente com parâmetros diferentes, os arquivos gcda são atualizados entre execuções e executar gcov uma vez (eu uso gcovr.py ) produz informação de cobertura agregada.

    
por quamrana 07.07.2011 / 14:48
fonte