【问题标题】:Why 'gcov' data isn't generated when running program with 'expect'?为什么在运行带有“expect”的程序时不生成“gcov”数据?
【发布时间】:2014-05-21 02:59:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ expect gcov


    【解决方案1】:

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

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

    #!/usr/bin/expect -f
    
    spawn ./xmpl Hey! xxx
    
    expect eof
    

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 2013-02-05
      • 2011-01-30
      • 2016-04-09
      • 2013-08-31
      • 1970-01-01
      • 2016-07-02
      • 2015-07-05
      相关资源
      最近更新 更多