2014-04-08 2 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 them은 실행이 완료 될 때까지 exec이 TCL (Expect)의 실행을 일시 중단한다는 것입니다. spawn으로 프로그램을 실행할 때 프로그램이 "자연스러운 목적"에 도달하지 않기 때문에 적용 범위 정보가 생성되지 않습니다.

문제를 해결하려면 expect 스크립트가 실행을 끝내기 전에 하위 프로세스가 완료 될 때까지 기다려야합니다. 이는 eof을 예상하여 수행 할 수 있습니다. 예상 스크립트가 다음과 같이 표시됩니다.

#!/usr/bin/expect -f 

spawn ./xmpl Hey! xxx 

expect eof 
관련 문제