代码之家  ›  专栏  ›  技术社区  ›  FL4SOF

C语言中的代码覆盖率

  •  1
  • FL4SOF  · 技术社区  · 16 年前

    我希望有C语言的代码覆盖率。我不能依赖像gcov这样的工具,因为我在不同的平台/编译器上工作。

    基本上,我正在寻找一种将代码覆盖率纳入(自己的实现)单元测试框架的策略。

    4 回复  |  直到 16 年前
        1
  •  1
  •   benno    16 年前

    如果您更新您的问题以描述您正在使用的平台和编译器,这将非常有帮助。

    我使用的一种策略是在可以跟踪所有指令的仿真器上运行系统。然后可以使用此指令跟踪计算代码覆盖率。

    在UNIX上,您还可以使用ptrace()运行进程来单步执行应用程序,从而捕获执行的指令。

    如果您只是想要函数调用跟踪,您可以对过程链接表进行一些恶意的黑客攻击,以跳转到一些专门的日志代码,但这可能太疯狂了。

    同样,需要更多关于执行环境和详细级别的详细信息才能给出有用的答案。

        2
  •  1
  •   philant    16 年前

    您是否有那么多特定于平台的代码,以至于您想要测量每个平台上的单元测试覆盖率?我的意思是,除非你有很多特定于平台的代码,否则你的单元测试覆盖率应该在你所有的目标上都是相似的,所以你可能不需要在你拥有的每个目标上衡量它。将特定于平台的代码移动到特定于平台的模块,这样公共代码的覆盖级别就不会被特定的代码降低,这可能会很有趣。

    你是在看分支覆盖还是功能覆盖?如果是后者,您可以使用gcc来插入代码,以便每个函数将其名称或地址输出到一个文件,并编写一个脚本来聚合所有平台的结果。

    抱歉只回答问题。。。嗯

        3
  •  1
  •   Harry    9 年前

    A. Page on code-coverage tools Brian Marick称之为GCT的东西通过源代码到源代码的转换实现代码覆盖率,因此您可以转换C代码,然后使用特定于平台的编译器构建它。我没有跟进细节。

        4
  •  0
  •   Adam Liss    16 年前