你如何使用llvm-cov报告c过滤?

我正在尝试使用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=< 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选项,否则它不会解码,但我不知道为什么llvm-cov似乎没有正确使用它.

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

难道我做错了什么?

最佳答案 在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修复了

点赞