我正在尝试使用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