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

swvgeqrz  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(259)

问题

1/当我想使用clang编译器进行评测时,我应该期待什么output
2/如何为使用clang作为编译器的C++ project执行profilingand CMake '作为构建工具?

重新分级分析我使用的内容

1/首先,我使用valgrind工具检查了cpp executable的性能。
2/后来,我使用了g++ compiler并浏览了this,在那里我看到了使用gprof执行分析的步骤。使用gprof的东西我是通过命令行完成的。从这个源代码中,我了解到gprof可以提供一个文本文件的输出(称为analysis.txt),其中写入了函数调用编号、执行时间等。

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

  • 现在,在我的项目中,我只能使用clang编译器和CMake构建工具,我已经阅读了clang文档,主要是这个和这个。
  • 在第一次试验中,我将两个cpp file放在同一个目录中(这显然不是所需的项目结构),并遵循以下命令来查看如何执行插装以及outcome将执行什么操作
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编译器激活这个分析过程。
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 file可从此处获得
  • 不了解如何/在何处/在哪个步骤中我可以启用性能分析标志(-fprofile-instr-generate -fcoverage-mappingLLVM_PROFILE_FILEllvm-profdata merge...等)
fwzugrvs

fwzugrvs1#

我已经发现,我必须学习更多如何处理CMake,因为总的答案就在我面前,现在我刚刚在CMake中添加了这些命令。
clang++-10 -fprofile-instr-generate -fcoverage-mapping test_gprof.cpp test_gprof_new.cpp -o code_coverage
以下是当前的CMake文件


# 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

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

相关问题