首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Clang编译器和CMake进行分析

如何使用Clang编译器和CMake进行分析
EN

Stack Overflow用户
提问于 2022-10-01 22:28:40
回答 1查看 284关注 0票数 1

问题

1/当我希望使用output编译器进行分析时,我希望得到什么clang

2/如何对使用profiling作为编译器的C++ project进行and as `作为构建工具?

重新定级我所用的

1首先,我使用了valgrind工具来检查cpp executable的性能。

2之后,我使用了g++ compiler,并通过了,在这里我看到了使用gprof执行分析的步骤。使用gprof的东西我已经通过命令行完成了。从这个来源我了解到,gprof可以提供一个文本文件的输出(称为analysis.txt),其中编写函数调用号、执行时间等。

到目前为止我的目标和方法

  • 现在,在我的项目中,我只能使用clang编译器和CMake构建工具。我读过clang文档,主要是这个和
  • 在第一次试验中,我将两个cpp file放在同一个目录中(显然不是所需的项目结构),并遵循以下命令来查看如何实现和outcome即将到来
代码语言:javascript
复制
clang++-10 -fprofile-instr-generate -fcoverage-mapping test_gprof.cpp test_gprof_new.cpp -o code_coverage
LLVM_PROFILE_FILE="code_coverage.profraw" ./code_coverage
llvm-profdata merge -sparse code_coverage.profraw -o code_coverage.profdata
llvm-cov show -show-line-counts-or-regions --show-regions=1 --show-expansions ./code_coverage -instr-profile=code_coverage.profdata
llvm-cov report ./code_coverage -instr-profile=code_coverage.profdata

我真的不确定我是否遵循了正确的步骤,但我希望看到一些analysis统计数据。

  • 最后,我可以看到一个report,我对它一无所知。在这里,我的第一个问题是,当我做profiling的时候,我能期待什么?
  • 而且,我不知道如何在CMake中激活clang编译器的这个分析过程。下面给出了一个虚拟文件夹结构,类似于真实的文件夹结构。
代码语言:javascript
复制
clang_profile_cmake/
├── CMakeLists.txt
├── example
│   └── main.cpp
├── include
│   ├── test_gprof.h
│   └── test_gprof_new.h
├── README.md
└── src
    ├── test_gprof.cpp
    └── test_gprof_new.cpp

最近的搜索(仍然无法通过CMake、Clang编译器生成任何分析数据)

  • 我必须将LLVM添加到我的项目中。我跟踪了
  • 我正在使用的CMakeLists.txt文件在这里可用
  • 不明白如何/在哪里/在哪个步骤中启用分析标志(-fprofile-instr-generate -fcoverage-mappingLLVM_PROFILE_FILEllvm-profdata merge .等)
EN

回答 1

Stack Overflow用户

发布于 2022-10-05 13:01:05

我发现,我必须更多地学习如何处理CMake,因为总答案就在我面前,现在我刚刚在CMake中添加了这些命令。

clang++-10 -fprofile-instr-generate -fcoverage-mapping test_gprof.cpp test_gprof_new.cpp -o code_coverage

下面是当前的CMake文件

代码语言:javascript
复制
# Set Clang Compiler
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-10")
set(CMAKE_CXX_COMPILER clang++-10)

# Set llvm clang instrumentation compile flags
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")

# Project name
project(clang_profiling_cmake)

# Next will be filled with common CMake Pattern

要构建或查看分析步骤,可以使用以下脚本。在我的例子中,我将输出可执行文件名设置为clang_prof_exec

代码语言:javascript
复制
rm -rf bin/ build/ lib/
mkdir build
cd build
cmake ..
make
cd ../bin

# creation of profraw file by executing the executable binary
LLVM_PROFILE_FILE="clang_prof_exec.profraw" ./clang_prof_exec

# Creation of profile data
llvm-profdata merge -sparse clang_prof_exec.profraw -o clang_prof_exec.profdata

# following commands are needed to investigate profiling output. Use any of these
llvm-cov show ./clang_prof_exec -instr-profile=clang_prof_exec.profdata
llvm-cov report ./clang_prof_exec -instr-profile=clang_prof_exec.profdata
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73922182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档