Fortran Coder

查看: 6144|回复: 3
打印 上一主题 下一主题

[调试器] common变量添加监视问题

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

楼主
发表于 2015-4-9 17:20:57 | 显示全部楼层
你理解得就不对。
common 只是变量具有的属性。而不是变量的一个集合。

具有 common 属性的变量,在调试器里,与普通变量没有区别。

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

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

沙发
发表于 2015-4-10 19:38:46 | 显示全部楼层
翻看了Intel Fortran 的手册,只有 module 变量的查看规则。没有 common 变量的查看规则。

根据我个人的理解,common 只是变量的一个属性,而不是全局变量,应该是无法查看的。

其实查找错误的方法有很多。这个问题可以通过“数据断点”来实现。

如下代码:
[Fortran] 纯文本查看 复制代码
common /x/ a , b , c
  real a , b , c
  a = 3.0
  b = 4.0
  c = 5.0
  call sb()
  call s()
  
  read(*,*)
end 


subroutine s()
  common /x/ a , b , c
  a = a+1 !// 此处修改了 a
  write(*,*) a
end

subroutine sb()
  real :: a
  a = 4444.0
  write(*,*) a
end


首先在 b=4.0 出下断点,并运行至该处。
此时,我们希望查找后面对变量 a 进行了改变的代码行。

第一步,找出 a 的内存地址。
点击调试菜单,窗口,即时。

在即时窗口输入 loc(a) ,得到其内存地址:#00118AA0

有可能不是十六进制的。你可以自己转成十六进制,也可以在局部变量窗口右键,选择“十六进制显示”进行切换。

第二步,插入数据断点
点击调试菜单,断点,新建数据断点。

然后直接点击调试的“继续”

第三步,程序会自动在修改了变量 a 的内存值时停下来。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-16 10:10

Powered by Tencent X3.4

© 2013-2024 Tencent

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