为什么' gcov'使用' expect'运行程序时不会生成数据?

时间:2014-04-08 12:11:05

标签: c++ expect gcov

假设一个名为xmpl.cpp的源文件(例如the one described by Fröhlich)。使用标记为gcc-fprofile-arcs的{​​{1}}编译此文件时,它会生成通常的二进制可执行文件-ftest-coverage和gcov数据文件xmpl。然后,当程序执行时,会生成另一个gcov数据文件xmpl.gcno,该文件包含执行期间收集的信息。

但是,当我使用expect脚本运行相同的程序时,不会生成xmpl.gcna。更具体地说,问题在于xmpl.gcna命令,spawn一切都很好(但是,为什么要使用expect,对吧?)。

我有兴趣解决这个问题,因为我们有许多期望脚本在我们的项目中执行一些测试,目前没有为这些测试生成覆盖信息。可以获取上述示例的代码here

1 个答案:

答案 0 :(得分:1)

spawnexec都会创建一个执行程序的新进程。 The difference between themexec暂停执行TCL(Expect)直到执行完成。由于程序在使用spawn运行程序时从未达到“自然结束”,因此无法生成覆盖信息。

要解决此问题,必须等到子流程完成后再让expect脚本结束执行,这可以通过期望eof来实现。这就是期望脚本的样子:

#!/usr/bin/expect -f

spawn ./xmpl Hey! xxx

expect eof