首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译简单C++程序时来自llvm的无法解释的剖面数据

编译简单C++程序时来自llvm的无法解释的剖面数据
EN

Stack Overflow用户
提问于 2022-08-31 01:56:29
回答 1查看 144关注 0票数 5

当分析下面的main.cpp文件时,我得到"test1完成“行的"0”,指示当我期望得到"1“时该行没有被执行

main.cpp

代码语言:javascript
复制
#include <cassert>
#include <iostream>

using namespace std;

void test1() {
  cout << "test1 start" << endl;
  string pdx;
  assert(pdx == "");
  cout << "test1 complete" << endl;
}

int main() {
  test1();
  cout << "Done." << endl;
}

要分析代码,我使用的脚本是:

代码语言:javascript
复制
#!/bin/bash

clang++ -g -std=c++11 -fprofile-instr-generate -fcoverage-mapping main.cpp

# Execute the program
./a.out

llvm-profdata merge default.profraw -output=merged.profraw

llvm-cov report -show-functions=1  ./a.out -instr-profile=merged.profraw main.cpp

llvm-cov show ./a.out -instr-profile=merged.profraw 

rm a.out *.profraw

# $ clang++ --version
# clang version 13.0.1 (Red Hat 13.0.1-2.module+el8.6.0+987+d36ea6a1)
# Target: x86_64-unknown-linux-gnu
# Thread model: posix
# InstalledDir: /usr/bin

如果去掉下面的行,就会得到预期的结果

代码语言:javascript
复制
  string pdx;
  assert(pdx == "");

分析main.cpp的输出

代码语言:javascript
复制
$ ./check-code-coverage.sh 
test1 start
test1 complete
Done.
File '/home/cssuwbstudent/pisan/bitbucket/pisan342/check-overage/main.cpp':
Name                        Regions    Miss   Cover     Lines    Miss   Cover  Branches    Miss   Cover
-------------------------------------------------------------------------------------------------------
_Z5test1v                         1       0 100.00%         6       1  83.33%         0       0   0.00%
main                              1       0 100.00%         4       0 100.00%         0       0   0.00%
-------------------------------------------------------------------------------------------------------
TOTAL                             2       0 100.00%        10       1  90.00%         0       0   0.00%
    1|       |#include <cassert>
    2|       |#include <iostream>
    3|       |
    4|       |using namespace std;
    5|       |
    6|      1|void test1() {
    7|      1|  cout << "test1 start" << endl;
    8|      1|  string pdx;
    9|      1|  assert(pdx == "");
   10|      0|  cout << "test1 complete" << endl;
   11|      1|}
   12|       |
   13|      1|int main() {
   14|      1|  test1();
   15|      1|  cout << "Done." << endl;
   16|      1|}

$

任何洞察力都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-31 18:23:34

这是一个错误,应该报告给发出叮当声的人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73550141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档