c++ 为什么gcovr无法使用g++版本12创建报告?

sdnqo3pr  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(243)

我最近升级了我的工具链,这导致gcovr无法生成任何覆盖率输出。有人能告诉我这是gcovr的问题,还是我的工具链,或者缺少依赖项?
以下是我用来验证的示例/比较:
example.cpp

  1. // Taken from gcovr user guide.
  2. // example.cpp
  3. int foo(int param)
  4. {
  5. if (param)
  6. {
  7. return 1;
  8. }
  9. else
  10. {
  11. return 0;
  12. }
  13. }
  14. int main(int argc, char* argv[])
  15. {
  16. foo(0);
  17. return 0;
  18. }

gcovr版本:

  1. gcovr 6.0
  2. Copyright (c) 2013-2023 the gcovr authors
  3. Copyright (c) 2013 Sandia Corporation.
  4. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
  5. the U.S. Government retains certain rights in this software.

使用g++版本时:

  1. g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
  2. Copyright (C) 2021 Free Software Foundation, Inc.
  3. This is free software; see the source for copying conditions. There is NO
  4. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我得到正确的结果:

  1. $ g++ -fprofile-arcs -ftest-coverage -fPIC -O0 example.cpp -o program
  2. $ ./program
  3. $ gcovr
  4. ------------------------------------------------------------------------------
  5. GCC Code Coverage Report
  6. Directory: .
  7. ------------------------------------------------------------------------------
  8. File Lines Exec Cover Missing
  9. ------------------------------------------------------------------------------
  10. example.cpp 7 6 85% 7
  11. ------------------------------------------------------------------------------
  12. TOTAL 7 6 85%
  13. ------------------------------------------------------------------------------

但是,当使用更新的版本12工具链时:

  1. g++-12 (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0
  2. Copyright (C) 2022 Free Software Foundation, Inc.
  3. This is free software; see the source for copying conditions. There is NO
  4. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我得到以下结果:

  1. $ g++-12 -fprofile-arcs -ftest-coverage -fPIC -O0 example.cpp -o program
  2. $ ./program
  3. $ gcovr
  4. (ERROR) Trouble processing '/home/janjaap/workspace/testgcovr/program-example.gcda' with working directory '/home/janjaap/workspace/testgcovr'.
  5. Stdout of gcov was >>None<< End of stdout
  6. Stderr of gcov was >>None<< End of stderr
  7. Current processed gcov file was None.
  8. Use option --verbose to get extended informations.
  9. Traceback (most recent call last):
  10. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 80, in worker
  11. work(*args, **kwargs)
  12. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 323, in process_datafile
  13. done = run_gcov_and_process_files(
  14. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 536, in run_gcov_and_process_files
  15. out, err = gcov_cmd.run_with_args(
  16. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 515, in run_with_args
  17. raise RuntimeError(
  18. RuntimeError: GCOV returncode was -11 (exited by signal).
  19. Traceback (most recent call last):
  20. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 80, in worker
  21. work(*args, **kwargs)
  22. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 323, in process_datafile
  23. done = run_gcov_and_process_files(
  24. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 536, in run_gcov_and_process_files
  25. out, err = gcov_cmd.run_with_args(
  26. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 515, in run_with_args
  27. raise RuntimeError(
  28. RuntimeError: GCOV returncode was -11 (exited by signal).
  29. (ERROR) Uncaught EXCEPTION
  30. Traceback (most recent call last):
  31. File "/home/janjaap/.local/bin/gcovr", line 8, in <module>
  32. sys.exit(main())
  33. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/__main__.py", line 328, in main
  34. covdata = collect_coverage_from_gcov(options)
  35. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/__main__.py", line 380, in collect_coverage_from_gcov
  36. with Workers(
  37. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 173, in __exit__
  38. self.wait()
  39. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 164, in wait
  40. raise self.exceptions[0][1]
  41. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/__main__.py", line 387, in collect_coverage_from_gcov
  42. contexts = pool.wait()
  43. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 164, in wait
  44. raise self.exceptions[0][1]
  45. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/workers.py", line 80, in worker
  46. work(*args, **kwargs)
  47. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 323, in process_datafile
  48. done = run_gcov_and_process_files(
  49. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 536, in run_gcov_and_process_files
  50. out, err = gcov_cmd.run_with_args(
  51. File "/home/janjaap/.local/lib/python3.10/site-packages/gcovr/gcov.py", line 515, in run_with_args
  52. raise RuntimeError(
  53. RuntimeError: GCOV returncode was -11 (exited by signal).
laximzn5

laximzn51#

当您使用系统默认的gcc/g++以外的编译器运行gcovr时,您必须告诉它使用哪个gcov工具。由于二进制覆盖率数据格式在编译器版本之间会发生变化,因此必须使用匹配的gcov
在这里,您使用的是g++-12。对应的gcov可能被称为gcov-12。您可以通过--gcov-executable选项告诉gcovr使用此选项。

  1. gcovr --gcov-executable gcov-12

进一步阅读:* 在gcovr文档中选择正确的Gcov可执行文件 *。

相关问题