【发布时间】:2023-03-12 03:11:01
【问题描述】:
我有两个使用通用 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,但结果相同。
【问题讨论】:
-
您的操作系统及其版本是什么?您是从这个操作系统安装 clang 还是自己构建的?
-
$ uname -a : Linux pratik-ubuntu 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux我使用apt-get install安装了 clang。 -
顺便说一句,忘了提一下,我正在使用主机 Mac OSX 安装在 VirtualBox 上的 Ubuntu 工作
-
这是 14.04.1 ubuntu,它应该在硬件或 virtualbox 中相同。
标签: c++ clang code-coverage profile gcov