问题
1/ 当我使用 clang
编译器进行性能分析时,我应该期望什么样的 输出
?
2/ 如何对使用 clang
作为编译器和 CMake
作为构建工具的 C++ 项目
进行 性能分析
?
关于我使用的性能分析工具
1/ 首先,我使用了 valgrind
工具来检查一个 cpp 可执行文件
的性能。
2/ 然后,我使用了 g++ 编译器
并参考了 这篇文章,其中介绍了使用 gprof
进行性能分析的步骤。我通过命令行完成了使用 gprof
的相关操作。从这个来源中,我知道 gprof
可以提供一个文本文件的输出(称为 analysis.txt
),其中包含函数调用次数、执行时间等信息。
我的目标和已经采取的方法
- 现在,在我的项目中,我只能使用
clang
编译器和CMake
构建工具。我阅读了 clang 的文档,主要是这个和 这个。 - 在第一次尝试中,我将两个
cpp 文件
放在同一个目录下(这显然不是期望的项目结构),并按照以下命令进行操作,以查看如何进行插装以及产生了什么样的输出
。
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
我不确定自己是否按照正确的步骤操作,但是我期望能看到一些分析统计数据。
- 最终,我可以看到一个报告,但我完全理解不了。这里,我的第一个问题是在进行性能分析时应该期望什么?
- 并且,我不知道如何在clang编译器的CMake中激活此性能分析过程。下面是一个类似真实文件夹结构的虚拟结构:
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
clang: warning: argument unused during compilation: '-pg' [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-pg' [-Wunused-command-line-argument]
гҖӮжҲ‘жғізҹҘйҒ“Clang
жҲ–иҖ…LLVM
жҳҜеҗҰж”ҜжҢҒ-pg
йҖүйЎ№пјҢдҪҶжҳҜе®ҳж–№ж–ҮжЎЈжҳҫзӨәclangж”ҜжҢҒ-pgгҖӮ - user10634362Clang
的gprof
,还是应该遵循仪器化分析。不知道它们之间有什么区别或优先级。 - user10634362pg
标志是用于gprof
分析工具的。 - user10634362