为什么在运行带有"期望"的程序时不生成'gcov'数据?
Why 'gcov' data isn't generated when running program with 'expect'?
假设一个名为xmpl.cpp
的源文件(例如Fröhlich描述的文件)。当使用带有标志-fprofile-arcs
和-ftest-coverage
的gcc
编译此文件时,它在通常的二进制可执行文件xmpl
和gcov数据文件xmpl.gcno
中生成。然后,当程序被执行时,生成另一个gcov数据文件xmpl.gcna
,该文件包含在执行期间收集的信息。
但是,当我使用expect脚本来运行相同的程序时,不会生成xmpl.gcna
。更具体地说,问题出在spawn
命令上,exec
一切都很好(但是,为什么要使用expect,对吧?)。
我对解决这个问题很感兴趣,因为我们有很多期望的脚本在我们的项目中执行一些测试,而目前还没有为这些测试生成覆盖率信息。上面描述的示例的代码可以在这里获取。
spawn
和exec
都创建了一个新进程来执行程序。它们之间的区别在于exec
暂停TCL(Expect)的执行,直到执行完成。由于在使用spawn
运行程序时,程序从未达到其"自然结束",因此无法生成覆盖范围信息。
要解决这个问题,必须等到子流程完成后,才能让期望的脚本结束执行,这可以通过期望eof
来实现。这就是预期脚本的样子:
#!/usr/bin/expect -f
spawn ./xmpl Hey! xxx
expect eof
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 为什么在运行带有"期望"的程序时不生成'gcov'数据?