我有两个使用通用C ++类的主要功能。

文件1:main.cpp

   #include <iostream>
   #include "HelloAnother.h"

   int main() {
       HelloAnother::sayHello1();
       return 0;
   }


档案2:main2.cpp

   #include <iostream>
   #include "HelloAnother.h"

   int main() {
       HelloAnother::sayHello2();
       return 0;
   }


档案3:HelloAnother.h

   #pragma once
    class HelloAnother {
        public:
         static void sayHello1();
         static void sayHello2();
    };


档案4:HelloAnother.cpp

#include <iostream>
#include "HelloAnother.h"
void HelloAnother::sayHello1() {
    std::cout << "Hello 1!!!" << std::endl;
}

void HelloAnother::sayHello2() {
    std::cout << "Hello 2 !!!" << std::endl;
}


现在,我编译两个可执行文件:
clang-3.8 -o main -fprofile-arcs -ftest-coverage --coverage -g -fPIC -lstdc++ main.cpp HelloAnother.cpp

clang-3.8 -o main2 -fprofile-arcs -ftest-coverage --coverage -g -fPIC -lstdc++ main2.cpp HelloAnother.cpp

现在,我运行./main


  你好1!


当我重新运行./main


  你好1!
  
  分析:/media/sf_ubuntu-shared/test-profiling/main.gcda:无法映射:无效参数
  分析:/media/sf_ubuntu-shared/test-profiling/HelloAnother.gcda:无法映射:无效参数


运行一秒钟后,在尝试创建/合并.gcda文件时出现了以上错误(以上)。

现在,如果我尝试运行./main2


  你好2 !!!
  
  分析:/media/sf_ubuntu-shared/test-profiling/HelloAnother.gcda:无法映射:无效参数


当我生成代码覆盖率报告时,对第二个函数的调用不会像未进行调用那样显示。

有人可以帮我调试此问题吗?该问题似乎与多次运行时合并.gcda文件有关,但不确定如何解决。

我也尝试了clang-3.5,但结果相同。

最佳答案

经过大量搜索和反复试验后,这对我有用:


编译第一个可执行文件,运行它。这将生成HelloAnother.gcda和main.gcda文件。
执行lcov --gcov-tool=gcov-4.4 --directory . --capture --output-file coverage.main.info
rm -rf * .gcda; rm -rf * .gcno
编译第二个可执行文件(main2.cpp),运行它。这将生成另一个HelloAnother.gcda和main2.gcda文件。
执行lcov --gcov-tool=gcov-4.4 --directory . --capture --output-file coverage.main2.info
现在要生成漂亮的html报告,请执行以下操作:genhtml -o coverage coverage.main.info coverage.main2.info

关于c++ - .gcda文件不会在多次运行中合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38492859/

10-12 15:01