我试图在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之前将其写入文件,但是当我看着运行时该文件为空命令。
我做错了吗?
答案 0 :(得分:2)
在llvm-cov中,似乎没有在任何地方使用解码函数名称。
此报告(生成函数名称需要-name-regex
选项)确实响应-Xdemangler
选项:
llvm-cov report /path/to/exe -name-regex=\.* -instr-profile=default.profdata -Xdemangler=c++filt
中修复