我有兴趣在ifort中使用差异代码覆盖率功能。 documentation似乎彻底解决了这个问题,但我没有将它应用于我的缩减示例。继承人我所拥有的:
program test
integer :: userinput
print *, 'enter 1 or 0'
read *, userinput
if (userinput.eq.1) then
print *, 'You have entered ONE'
else
print *, 'You have not entered ONE'
end if
end program test
一个简单的程序,可以采用两种途径之一。如果用户输入1然后进入if ... then语句,如果用户输入0,则进入else ...语句。
差异代码覆盖的目标(如英特尔文档所述)如下:
比较两次运行应用程序的配置文件:参考运行 和一个新的运行,标识新运行所涵盖的代码但是 不参考参考运行
因此,如果我们采用用户输入0的参考运行和用户输入1的新运行,差分代码覆盖应该能够识别新运行覆盖if语句而参考运行不包含(参考) run进入else语句)。我尽可能地跟踪文档。源文件名为test.f90。以下是我使用的编译行:
ifort test.f90 /Qcov-gen
生成PGOPTI.SPI,PGOPTI,test.exe和test.obj。然后我运行可执行文件并输入0,我收到正确的消息"您还没有输入ONE"。这会导致创建.dyn文件(由于Qcov-gen选项)。然后我做以下事情:
profmerge
生成附加文件pgopti.dpi,pgopti.dpi.lock。在这一点上,我认为我有足够的材料来生成我的参考数据。我尝试使用以下内容:
codecov -prj Project_Name -dpi pgopti.dpi -ref pgopti.dpi
生成的html文件类似于在Visual Studio for Intel Fortran中运行代码覆盖时显示的html文件。我也得到100%的代码覆盖率似乎不正确。然后,文档显示此命令:
codecov -prj Project_Name -spi pgopti.spi -dpi pgopti.dpi
这似乎没有提供新运行的机会。
有人可以解释如何在这个特定的例子上做一个简单的差分代码覆盖吗?我最终试图将其推广到一个更大的项目,但我试图采取措施来实现目标。