你如何使用llvm-cov报告使用c ++ filt?

时间:2016-12-02 00:33:31

标签: c++ llvm code-coverage llvm-cov

我试图在llvm-cov报告工具中使用demangler。以下是我正在运行的命令:

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-strip-underscore而不是-n。它没有抱怨demangler,而如果我用命令语法做出明显的错误,它会告诉我,但输出不是demangled。

来自llvm-cov文档:

  

-Xdemangler = LT;工具> |<工具选项>   指定符号demangler。这可用于使报告更易于阅读。可以多次指定此选项以向demangler 提供参数(例如-Xdemangler c ++ filt -Xdemangler -n for C ++)。 demangler应该从stdin中读取换行符号的换行符,并将相同长度的换行符列表写入stdout。

我已经使用以下方法确保c ++ filt工作正常:

c++filt -n _ZN4core6ZipperC2ENSt3__110shared_ptrIN8core_gen14PlatformZipperEEE

输出:

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

我必须使用-n选项,否则它不会消失,但我为什么llvm-cov似乎没有正确使用它而感到茫然。

我还尝试使用shell脚本尝试捕获输入llvm-cov给demangler并在调用c ++ filt之前将其写入文件,但是当我看着运行时该文件为空命令。

我做错了吗?

1 个答案:

答案 0 :(得分:2)

在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

中修复