我有一个使用英特尔工具链编译的项目。所有.f90
文件都编译成bin目录下的对应.o
文件。当我使用该codecov
实用程序时,我会得到一个包含文件列表的 HTML。但是,该列表缺少一堆应该有资格覆盖的文件。这些文件中包含的一些模块甚至在运行期间使用。
覆盖报告中缺少这些文件的原因可能是什么?
编辑
用调试器运行二进制文件我注意到了一些可能是线索的东西。
如果我尝试在未涵盖的文件中设置断点,则会gdb
引发错误:
No line xxx in file "disturb_coms.f90".
但是disturb_coms.f90
在 bin 文件夹中:
manfredo@cave05:build$ ll bin-dbg-A/disturb*
-rw-r--r-- 1 manfredo staff 15K Jun 29 10:41 bin-dbg-A/disturb_coms.f90
-rw-r--r-- 1 manfredo staff 3.9K Jun 29 10:41 bin-dbg-A/disturb_coms.mod
-rw-r--r-- 1 manfredo staff 4.9K Jun 29 10:41 bin-dbg-A/disturb_coms.o
-rw-r--r-- 1 manfredo staff 221K Jun 29 10:43 bin-dbg-A/disturbance.f90
-rw-r--r-- 1 manfredo staff 4.1M Jun 29 10:43 bin-dbg-A/disturbance.o
-rw-r--r-- 1 manfredo staff 3.2M Jun 29 10:43 bin-dbg-A/disturbance_utils.mod
并编译为:
ifort -c -FR -CB -O0 -check -g -prof-gen=srcpos -debug full -debug-parameters all -fpe0 -traceback -ftrapuv -fp-stack-check -implicitnone -assume byterecl -warn unused -warn uncalled -warn usage -gen-interfaces -I../../src/include -I/usr/local/hdf5_mio/include disturb_coms.f90
此外,一个名为的文件disturbance.f90
包含以下几行:
module disturbance_utils
contains
subroutine apply_disturbances(cgrid)
...
use disturb_coms , only : treefall_disturbance_rate ! ! intent(in)
...
cpoly%disturbance_rates(2,2,isi) = treefall_disturbance_rate
...
end subroutine apply_disturbances
end module disturbance_utils
wheredisturb_coms
使用,文件干扰实际上是覆盖的。
编辑
通过在内部添加写入指令disturb_coms.f90
并尝试编译,我收到以下错误:
disturb_coms.f90(44): error #6274: This statement must not appear in the specification part of a module.
write(*,*) "try"
^
我对 Fortran 没有太多经验,但在我看来,该模块好像是一种与 c 等效的头文件。是否还有可能覆盖该文件?就像只是检查其中包含的定义是否在其他地方使用?