你如何将 c++filt 与 llvm-cov 报告一起使用?

How do you use c++filt with llvm-cov report?

我正在尝试将 demangler 与 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-strip-underscore 代替 -n。它不会抱怨 demangler,而如果我在命令语法上犯了一个明显的错误,它会告诉我,但输出没有被 demangled。

来自 llvm-cov 文档:

-Xdemangler=< TOOL >|< TOOL-OPTION > Specify a symbol demangler. This can be used to make reports more human-readable. This option can be specified multiple times to supply arguments to the demangler (e.g -Xdemangler c++filt -Xdemangler -n for C++). The demangler is expected to read a newline-separated list of symbols from stdin and write a newline-separated list of the same length to stdout.

我使用了以下内容来确保 c++filt 正常工作,并且确实如此:

c++filt -n _ZN4core6ZipperC2ENSt3__110shared_ptrIN8core_gen14PlatformZipperEEE

输出:

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

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

我还尝试使用 shell 脚本来尝试捕获 llvm-cov 提供给 demangler 的输入,并在调用 c++filt 之前将其写入文件,但是文件是空的我查看了 运行 命令。

我是不是做错了什么?

在 llvm-cov 中似乎并没有在任何地方使用 demangled 函数名称。

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

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

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

中修复