totalview只识别一些变量,可执行行

时间:2017-03-02 17:55:21

标签: debugging fortran totalview

如何让totalview提供访问我代码中所有变量的权限?

我正在尝试使用totalview调试Fortran90程序。我使用“-g”标志编译并链接到Intel的ifort。 totalview可以单步执行我的程序,但只为我的子程序中的四个变量提供“潜水”,并且许多可执行源代码行没有我可以检查设置动作点的框。在下面声明的所有变量中,只有cell_EW,cell_NS,area和pct可用于稍后在子例程中潜水。

164  REAL, allocatable, DIMENSION(:), INTENT(in) :: lon, lat
165  REAL, ALLOCATABLE, DIMENSION(:, :, :, :) :: area, pct
166  REAL, ALLOCATABLE, DIMENSION(:, :, :), INTENT(in) :: in_flux
167  REAL, ALLOCATABLE, DIMENSION(:, :, :), INTENT(inout) :: out_flux
168  REAL :: cell_EW, cell_NS
169  INTEGER status, ierr, dimid, nlon, nlat, ntimes
170  INTEGER i, j, k, LOGDEV, this_var, this_t
171  INTEGER jdate, jtime, this_date, this_time

另一个例子:第190行不允许我设置动作点,并且ntimes无法识别为变量。

189  CALL calc_land_area(pct, cell_EW, cell_NS, lon, lat, area)
190  ntimes = SIZE(in_flux, 1)  ! first dimension is time
191  do i = 1, ntimes

1 个答案:

答案 0 :(得分:2)

当变量在gdb和totalview等检查工具中不可用时,通常是因为编译器已将它们优化掉了。这在总视图faq

中暗示
  

不要使用优化标记编译程序   调试它。编译器优化可以“重写”您的程序和   生成不一定与您的源代码匹配的机器代码。

由于不同的编译器具有不同的默认优化级别(并且可能-g可能除了包含符号之外还有其他含义),通常最好包含显式-O0或等效的以禁用任何优化。某些编译器(例如gfortran版本> = v4.8)提供了具有-Og标志的特定调试优化级别,如此answer中所述。这允许优化不会影响调试能力。