如何 运行 gcov on bare metal (without file system)

how to run gcov on bare metal (without file system)

我是 运行 Cortex M4 上的 C++,我想开始进行自动化单元测试和覆盖。

gcov 将其输出文件 - .gcno, .gcda - 写入目标 这是不行的,因为我没有文件系统。

问题

是否可以 "intercept and redirect" 使用 gdb 将这些写入 PC?

我想通过 Python 脚本自动执行这些测试:

  1. 从数据库获取单元测试
  2. 编译
  3. 转移到目标板
  4. 运行
  5. 将结果重定向到 PC

所以,我不知道 gcov,谢谢。

快速查看 man gcov 表明我的系统上有它并且存在以下选项:

-t, --stdout Output to stdout instead of a file

我好久没做了python,但是你应该可以创建一个memory-only文件,假设打开的文件句柄是8,使用:

gcov -t [whatever you are doing] >&8

-t 参数告诉 gcov 打印到标准输出而不是写入文件,>&8 覆盖标准输出(如所执行的程序所见)为文件句柄 8 而不是 1(在大多数 unix/posix/whateveryoucallit, 无论如何).

当然是在 bash 中,您可以从 python 中调用它,或者转码为您在 python 中实现此目的的方式。

我还没有尝试过,所以如果它有帮助(或者如果没有)请务必留下一个标记以帮助未来的读者。

看起来有些人正在这样做(在裸机上使用 gcov)

https://dzone.com/articles/gnu-code-coverage-on-embedded-targets http://allsoftwaresucks.blogspot.com/2015/05/gcov-is-amazing-yet-undocumented.html