2014-04-08 62 views
2

假設一個名爲xmpl.cpp(例如the one described by Fröhlich)的源文件。當編譯此文件與gcc與標誌-fprofile-arcs-ftest-coverage,它產生在通常的二進制可執行文件xmpl和gcov的數據文件xmpl.gcno。然後,當程序執行時,會生成另一個gcov數據文件xmpl.gcna,這個文件包含執行過程中收集的信息。爲什麼'expect'時運行程序時不會生成'gcov'數據?

然而,當我使用expect腳本運行不產生xmpl.gcna相同的程序。更具體地說,問題是與spawn命令,exec一切都很好(但那麼,爲什麼使用期望,對吧?)。

我感興趣的是解決這個問題,因爲我們有很多的期待在我們的項目進行了一些測試腳本和目前正在爲這些測試沒有生成覆蓋率信息。上述示例的代碼可以取自here

回答

1

兩個spawnexec創建一個新的進程來執行程序。 The difference between themexec暫停執行TCL(Expect)直到執行完成。由於程序在運行spawn程序時永遠不會達到「自然結束」,因此不會生成覆蓋信息。

要解決該問題,必須等到子進程完成後再讓expect腳本結束其執行,這可以通過期望eof來實現。這是預期的腳本應該是什麼樣子:

#!/usr/bin/expect -f 

spawn ./xmpl Hey! xxx 

expect eof 
相關問題