How can I get more accurate results from gcov?

。_饼干妹妹 提交于 2019-11-30 02:43:35

问题


I'm experimenting with gcov using mingw gcc 4.4.0. I've been getting some interesting but strange results. A common pattern is something like this...

     5162:   66:  std::string::iterator i = l_Temp.begin ();
     5162:   67:  std::string::iterator j = l_Temp.end () - 1;
        -:   68:  char ch;
        -:   69:
    20564:   70:  while (i < j)
        -:   71:  {
    10240:   72:    ch = *i; *i = *j; *j = ch; i++; j--;
        -:   73:  }
        -:   74:
    #####:   75:  return l_Temp;
        -:   76:}

How can that return not be exected at all, given that the loop just before clearly is both executing and exiting? I think I'm a victim of the return value optimisation here, given that this temporary variable is of type std::string.

The trouble is, I'm already specifying -O0 in the compiler options. These are the exact compiler flags I'm using...

-Wno-invalid-offsetof -g -O0 -fprofile-arcs -ftest-coverage

My best guess is that not all optimisations are disabled by -O0 after all. I can start hunting down specific optimisation flags one by one as I notice problems, but this seems a strange thing to need to do.

So - what flags should I be specifying in order to get sane coverage results from gcov?

EDIT

So far, I think I need the following additional flags...

  • -fno-default-inline
  • -fno-inline

I'm not sure these are both needed, though I think they each disable a different specific type of inline.

I haven't found any way to disable return value optimisations, though. This isn't a big problem, but it's a bit of an annoyance. When aiming for 100% coverage, some files that really do achieve 100% will be reported as less because of this issue. A grep can find the ##### markers and show if they're for return statements, but you still need to do some visual inspection to check that the problem is purely an RVO.


回答1:


As suggested in the comment by Mat, the option -fno-elide-constructors fixes this problem.

This answer was posted to get this already ancient question closed. If Mat posts an answer, I'll delete this and switch the accept to that.



来源:https://stackoverflow.com/questions/3432542/how-can-i-get-more-accurate-results-from-gcov

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!