Fortran Coder

查看: 15966|回复: 10
打印 上一主题 下一主题

[调试器] debug之后在watch窗口出现undefined variable

[复制链接]

7

帖子

1

主题

0

精华

入门

F 币
46 元
贡献
28 点

规矩勋章

跳转到指定楼层
楼主
发表于 2015-10-29 10:35:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        如题,先贴上主程序的部分代码
[Fortran] 纯文本查看 复制代码
        PROGRAM sphere_HS

        IMPLICIT NONE
        INTEGER NZ,I,K,Dim,NN,J,n,II,JJ,KK,IMAX,lm,T1,T2
        PARAMETER (NZ=2000,Dim=62,NN=61,T1=15,T2=30)

        real(kind=8) DZ,PI,F,ETA,Y,SADD,SUMP,Rc0,RC,S,z,sum,Fai

        real(kind=8) AMU(Dim),FF(Dim,NZ)
        real(kind=8) RHO(Dim,2*NZ),RO(Dim,2*NZ)
        real(kind=8) RHO1(Dim,2*NZ),RH(Dim,2*NZ)
        real(kind=8) SIGMA(DIM),TEMP,RCI,RHOBC,TEN,RD(Dim,2*NZ)
        PARAMETER (PI=3.141592654)

        real(kind=8) RHOB(Dim),TF,DEFF(Dim),H,Z0,ZH,TEMP0(30000)
        real(kind=8) ZZ1,rmax,rr,dr,PHI(DIM,2*NZ)
        
        real(kind=8) ANX1,ANX2,PPP,R,DDE1,DDE2,PT1(NZ),PT2(NZ),PF(NZ)
        real(kind=8) AMU1,AMU2,MIUT1,MIUT2,WR,mDirCorFun(dim,dim,2048)
        real(kind=8) FDirCorFun(dim,dim,2048),SDirCorFun(dim,dim,2048)
        real(kind=8) DirCorFun(dim,dim,2048),cDirCorFun(DIM,DIM,2*NZ)

        real(kind=8) Epsi_Thigma(Dim),sigma1(Dim,Dim),rs(Dim,Dim)
        real(kind=8) Epsi_Thigma1(Dim,Dim),z1,Uatt(DIm,Dim,2*NZ)  

91    FORMAT(1X,2000g15.6)

        do i=1,NN
        SIGMA(i)=1.0       
        enddo
        sigma(dim)=4.0     

        F=0.005D0

        DZ=0.02D0*SIGMA(1)



        ETA=0.35
      Fai=0.1

        DO I=1,T2
      RHOB(I)=0.0001
        ENDDO
      DO I=T2+1,NN
      RHOB(I)=ETA*(1-Fai)*6./PI/sigma(I)**3/DFLOAT(NN-T2)  
        ENDDO
      RHOB(Dim)=ETA*Fai*6./PI/sigma(dim)**3 


      write(*,*)  RHOB



      CALL CPS(Dim,SIGMA,RHOB,AMU)

      write(*,*) AMU

后面还有很长就不贴了,但是我在这个地方DEBUG就已经出现这个问题了,截图贴给大家看看,右下角窗口的变量DIM没有数值,但是AMU却有值且不为0。

再附上子程序CPS的代码
[Fortran] 纯文本查看 复制代码
SUBROUTINE CPS(M,R,ROU,AMU)
      INTEGER M
        real(kind=8)  R(M),ROU(M),AMU(M),amu1(M)
        real(kind=8)  ATT(2),PI,PIA,A1,A2,A3,A4
        real(kind=8)  AKX0,AKX1,AKX2,AKX3,F2,DF3,PHS
        real(kind=8)  AKX31,AKX31S,AKX31C
        PARAMETER (PI=3.141592654)
        AKX0=0.0
        AKX1=0.0
        AKX2=0.0
        AKX3=0.0
        PIA=PI/6.
        
        DO 10 I=1,M
        AKX0=AKX0+ROU(I)
        AKX1=AKX1+ROU(I)*R(I)/2           ! R is diameter 
        AKX2=AKX2+ROU(I)*R(I)*R(I)*PI
        AKX3=AKX3+ROU(I)*R(I)**3*PIA
10        CONTINUE

        AKX31=1.0-AKX3
        AKX31S=AKX31*AKX31
        AKX31C=AKX31S*AKX31

        PHS=AKX0/AKX31+AKX1*AKX2/AKX31S+(3.-AKX3)*AKX2**3/AKX31C/36./PI

        F2=DLOG(AKX31)+AKX3/AKX31-0.5*(AKX3/AKX31)**2
        F3=2.*DLOG(AKX31)+AKX3*(1.+AKX31)/AKX31

        
        DO 20 I=1,M
        A1=-DLOG(AKX31)  +   AKX2/AKX31*R(I)/2.

        A2=AKX1/AKX31*PI*R(I)**2
     &        +3*AKX2**2*(DLOG(AKX31)*AKX31S+AKX3)/36./PI/AKX3**2/AKX31S
     &    *PI*R(I)**2

        A3=(AKX0/AKX31+AKX1*AKX2/AKX31S)*R(I)**3*PIA

        A4=(-AKX2**3/36./PI/AKX3**2/AKX31
     &    -2.*AKX2**3/36./PI/AKX3**3*DLOG(AKX31)
     &    -AKX2**3*(1.-3.*AKX3)/36./PI/AKX31**3/AKX3**2)*R(I)**3*PIA

        AMU(I)=A1+A2+A3+A4

20        CONTINUE

        RETURN
        END

我用的编译器是CVF,不知我的问题描述清楚没,请各位大神多多帮助!!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2015-10-29 11:59:18 | 只看该作者
parameter 常数默认是在调试器里看不到的。

IVF编译器可以增加开关: /debug-parameters:all 来实现调试时看到 parameter。但  CVF 没有这个功能。

7

帖子

1

主题

0

精华

入门

F 币
46 元
贡献
28 点

规矩勋章

板凳
 楼主| 发表于 2015-10-29 14:49:14 | 只看该作者
fcode 发表于 2015-10-29 11:59
parameter 常数默认是在调试器里看不到的。

IVF编译器可以增加开关: /debug-parameters:all 来实现调试时 ...

原来是这样,那debug子程序的时候出现undefined pointer/array又是怎么造成的呢?在我CPS的子程序里sigma(dim)是可以看到数值的,但是在其他子程序中sigma(dim)又看不到了,这是什么原因?如下图

undefined2.JPG (128.08 KB, 下载次数: 382)

undefined2.JPG

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2015-10-29 16:25:07 | 只看该作者
你必须在变量的有效作用域里面断点,才能看到他。

从你的截图里,我看不到断点在哪儿。

7

帖子

1

主题

0

精华

入门

F 币
46 元
贡献
28 点

规矩勋章

5#
 楼主| 发表于 2015-10-29 17:08:22 | 只看该作者
fcode 发表于 2015-10-29 16:25
你必须在变量的有效作用域里面断点,才能看到他。

从你的截图里,我看不到断点在哪儿。 ...

抱歉,图没截好,断点在format的下一行。变量的有效作用域是什么?我刚接触fortran不久,这些概念不清楚。

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

6#
发表于 2015-10-29 18:25:36 | 只看该作者
比如说,子程序的局部变量,作用域就在本子程序内部。出了这个子程序,它就作用不到了。这就是作用域。

不在作用域的变量,debug也看不到。

7

帖子

1

主题

0

精华

入门

F 币
46 元
贡献
28 点

规矩勋章

7#
 楼主| 发表于 2015-10-29 18:43:48 | 只看该作者
fcode 发表于 2015-10-29 18:25
比如说,子程序的局部变量,作用域就在本子程序内部。出了这个子程序,它就作用不到了。这就是作用域。

不 ...

但是我这个变量是在主程序就申明了啊,然后传递到子程序中,而且第一个子程序能显示,后面的都不行了

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

8#
发表于 2015-10-29 18:52:53 | 只看该作者
重新截个图吧。
注意:
1. 让我看到断点,并且在子程序的中间(而不是在结束的位置)
2. 全屏截图。

7

帖子

1

主题

0

精华

入门

F 币
46 元
贡献
28 点

规矩勋章

9#
 楼主| 发表于 2015-10-29 19:16:22 | 只看该作者
fcode 发表于 2015-10-29 18:52
重新截个图吧。
注意:
1. 让我看到断点,并且在子程序的中间(而不是在结束的位置)

是这样吗?

1.JPG (203.86 KB, 下载次数: 395)

1.JPG

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

10#
发表于 2015-10-29 21:45:38 | 只看该作者
OK。win7下请不要用CVF,会有很多莫名其妙的问题。

详见:http://cvfwin7.w.fcode.cn
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-19 19:48

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表