4

我正在尝试将 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。它不会抱怨去解码器,而如果我用命令语法犯了一个明显的错误,它会告诉我,但输出不会被去解码。

来自 llvm-cov 文档:

-Xdemangler=< TOOL >|< TOOL-OPTION > 指定一个符号 demangler。这可用于使报告更具人类可读性。可以多次指定此选项以向 demangler 提供参数(例如 -Xdemangler c++filt -Xdemangler -n for C++)。解码器应该从标准输入读取换行符分隔的符号列表,并将相同长度的换行符分隔列表写入标准输出。

我使用以下方法确保 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 提供给去解码器的输入,并在调用 c++filt 之前将其写入文件,但是当我在运行命令后查看时文件为空。

难道我做错了什么?

4

1 回答 1

2

似乎在 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中修复

于 2017-02-17T18:17:24.737 回答