Как вы используете C++ фильтром с отчетом llvm-cov?
Я пытаюсь использовать 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++ фильтр -Xdemangler=-n" вместо этого, а также использовать --no-strip-underscore вместо -n. Он не жалуется на деманглера, тогда как, если я делаю очевидную ошибку с командным синтаксисом, он говорит мне, но вывод не деманглируется.
Из документации llvm-cov:
-Xdemangler =
| Указать деманглер символа. Это может использоваться, чтобы сделать отчеты более удобочитаемыми. Эту опцию можно указывать несколько раз для предоставления аргументов деманглеру (например, -Xdemangler C++ Filter -Xdemangler -n для C++). Ожидается, что demangler будет читать список символов, разделенных символом новой строки, из stdin и записывать список строк, разделенных символом новой строки, той же длины в стандартный вывод.
Я использовал следующее, чтобы убедиться, что C++ Filter работает, и это работает:
c++filt -n _ZN4core6ZipperC2ENSt3__110shared_ptrIN8core_gen14PlatformZipperEEE
Выход:
core::Zipper::Zipper(std::__1::shared_ptr<core_gen::PlatformZipper>)
Я должен использовать опцию -n, иначе она не будет разобрана, но я в растерянности, почему llvm-cov, похоже, не использует ее правильно.
Я также пытался использовать сценарий оболочки, чтобы попытаться перехватить ввод, который llvm-cov дает деманглеру, и записать его в файл перед вызовом C++ фильт, но файл был пустым, когда я посмотрел после выполнения команды.
Я делаю что-то неправильно?
1 ответ
Похоже, что использование имен разделенных функций не везде подключено в 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