Fortran Coder

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

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

[复制链接]

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
跳转到指定楼层
楼主
发表于 2015-4-9 14:04:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RT,求助怎样在Intel Visual Fortran (11.0)版本中如何监视common中定义的变量?
另外,在Compad Visual Fortran(6.6)中如何监视common中定义的变量?

备注:我自己试过“common名+::或%%+变量名”,都不对,显示未定义变量。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

沙发
发表于 2015-4-9 17:20:57 | 只看该作者
你理解得就不对。
common 只是变量具有的属性。而不是变量的一个集合。

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

30

帖子

8

主题

0

精华

熟手

F 币
212 元
贡献
104 点
板凳
 楼主| 发表于 2015-4-10 00:33:42 | 只看该作者
fcode 发表于 2015-4-9 17:20
你理解得就不对。
common 只是变量具有的属性。而不是变量的一个集合。

额,应该是太着急没有表述清楚哈!

我是想在整个程序的执行过程中监视一些具有common属性的变量,很明显当执行到使用某个common块的子程序时,可以方便的添加这些变量的监视。但是当当前debug的子程序不包含该common块时,就无法监视对应的变量。
问题的初衷是想查找几个计算有错误的变量,想通过对其变化的监视自顶而下地寻找到具体是在哪个子程序执行过程中发生了变化。由于需要监视的common块中的变量被使用的子程序很多很多,逐个查找不太现实,打算从程序大的调用关系入手,逐步缩小范围。
世界上有 10 种人:懂 10 进制的人,和不懂 10 进制的人。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

地板
发表于 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-4-29 10:03

Powered by Tencent X3.4

© 2013-2024 Tencent

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