如何将C++过滤器与llvm-cov报告一起使用?

2022-04-03 00:00:00 code-coverage llvm c++ llvm-cov

我正在尝试使用带有llvm-cov报告工具的指示器。以下是我正在运行的命令:

llvm-cov report /path/to/executable -instr-profile /path/to/default.profdata /path/to/src/ -Xdemangler c++filt -Xdemangler -n

我尝试重新排列选项,并尝试使用"-Xdemangler=c++FILT-Xdemangler=-n",并且还使用--no-strial-Underline而不是-n。它不会抱怨去角度分析器,而如果我在命令语法上犯了一个明显的错误,它会告诉我,但输出没有去角度。

来自llvm-cov文档:

-Xdemangler=<;工具>|<;工具-选项> 指定符号拆分器。这可以用来使报告更具人类可读性。可以多次指定该选项以向解析器提供参数(例如,对于C++,则为-Xdemangler c++filt-Xdemangler-n)。反命令分析器应从标准输入中读取换行符分隔的符号列表,并将相同长度的换行符分隔列表写入标准输出。

我使用了以下方法来确保c++筛选器正常工作,并且确实有效:

c++filt -n _ZN4core6ZipperC2ENSt3__110shared_ptrIN8core_gen14PlatformZipperEEE

输出:

core::Zipper::Zipper(std::__1::shared_ptr<core_gen::PlatformZipper>)

我必须使用-n选项,否则它不会被删除,但我不知道为什么llvm-cov似乎没有正确使用它。

在调用c++筛选器之前,我还尝试使用外壳脚本尝试捕获提供给解析器的输入llvm-cov,并将其写入文件,但在运行命令后查看该文件时,该文件为空。

我做错了什么吗?


解决方案

似乎在llvm-cov中并不是到处都在使用脱离角度的函数名称。

此报表(需要-name-regex选项才能生成函数名称)确实响应-Xdemangler选项:

llvm-cov report /path/to/exe -name-regex=.* -instr-profile=default.profdata -Xdemangler=c++filt

我看到它已在https://reviews.llvm.org/rL294136

中修复

相关文章