主题:[原创]CVF中Debug模式的使用
mltx
[专家分:20880] 发布于 2005-11-06 11:37:00
CVF中有两种编译(连接、执行)模式:release模式和debug模式。
调试程序时,宜用debug模式;调好后再用release模式,得到高效的执行程序。
设定debug模式:
点击菜单Build/Set Active Project Configuration,选 *- Win32 Debug,OK,即设定为debug模式。
以debug模式执行:
点击“Go (F5)”按钮,或直接按F5键,则执行程序,并在第一个出错语句处停止,在该语句前有一个小黄色箭头。
若程序没错,则一直执行完毕,自动关闭dos窗口。此时,宜用“!”按钮或“Ctrl+F5”键,执行完成后,dos窗口等待用户关闭。
设置断点:
若希望执行时在某一语句处暂停,可将光标置于该语句,点击“手”形状的按钮,或按F9键,则程序执行到该语句时停在该语句处。
单步执行:
F10(不进入子过程程序段)或者F11(遇到子过程进入子过程程序段继续单步执行)。在工具栏上都有相应的按钮。
查看变量值:
小黄箭头停在某语句时,按下Variable按钮,显示当前程序段的变量值;
对于简单变量,将光标放在该变量上,则即时显示该变量值。
先简单说这么多。
[color=FF0000]2005.11.06:如何用Debug模式获得更多的提示信息[/color]
依次选择/打开:Project => Settings => Fortran => Compilation Diagnostics
建议选中以下各项:
Argument Mismatch (类型不一致)
Data Alignment (数据排列错位)
Uncalled Routines (从无调用的子过程)
Undeclared Symbols (未声明变量、过程等)
Uninitialized Variables (未赋初始值的变量)
Unused Variables (从未用到的变量)
Usage (用法)
用了这些选项,可以对很多潜在的问题给予警告,使代码更为规范安全。
注意:Uninitialized Variables只对简单变量有效,对数组无效。如果简单变量a未给初值,而用于 b=3.0*a,则编译时将报错,但是如果a是个数组变量,则不报错。(不知后来的Intel VF版本有没有改进?)
另外也建议以下设置:
Fortran Standard Checking: Fortran 90/95
这样,非标准的、厂家扩充的语法功能就会给出警告。
回复列表 (共57个回复)
21 楼
yuenqing [专家分:60] 发布于 2005-03-19 21:49:00
STK(3800)
赋值后有显示NaN,什么意思
22 楼
yuenqing [专家分:60] 发布于 2005-03-19 22:29:00
1773: END
黄色箭头:0041E14F ffree st(2)
0041E151 ffree st(1)
0041E153 ffree st(0)
0041E155 pop edi
0041E156 pop esi
0041E157 pop ebx
0041E158 mov esp,ebp
0041E15A pop ebp
0041E15B ret 0C4h
1774: SUBROUTINE TRIANG(RK,N1,MP,N2)
0041E15E push ebp
0041E15F mov ebp,esp
0041E161 sub esp,54h
0041E164 push ebx
源程序
DO 3018 I=1,NF
IF(I.EQ.1)THEN
MM=0
ELSE
MM=MP(I-1)
END IF
MM1=MP(I)
DO 3009 K=MM+1,MM1
J=1
STK(K)=SKZ(I,J)
J=J+1
3009 CONTINUE
3018 CONTINUE
黄色箭头: END
SUBROUTINE TRIANG(RK,N1,MP,N2)
DIMENSION RK(N1),MP(N2)
DO 10 I=2,N2
IF((MP(I)-MP(I-1)).EQ.1) GOTO 10
MI=I-MP(I)+MP(I-1)+1
MI1=MI+1
MN1=MP(I)
DO 15 J=MI1,I
STK(3800)
怎么解决呢??
23 楼
mltx [专家分:20880] 发布于 2005-03-19 22:44:00
NaN = Not a Number (不是数值)
赋给STK(3800)的不是一个数值。错误信息很明显,自己查查原因。
24 楼
yuenqing [专家分:60] 发布于 2005-03-20 09:53:00
SKZ(49,18) Array expansion limited to 1000 nodes
这个提示怎么回事,我数组定义的没什么没问题啊
25 楼
mltx [专家分:20880] 发布于 2005-03-20 10:50:00
哪来的提示?什么阶段?编译还是链接?
问题没头没脑就很难回复。
26 楼
yuenqing [专家分:60] 发布于 2005-03-20 13:09:00
debug阶段啊
27 楼
mltx [专家分:20880] 发布于 2005-03-20 14:02:00
debug阶段也有很多种情形,太让人费解。多写几句都不行啊。只好胡猜了:
是不是你点击了数组SKZ前的加号试图展开该数组元素时,出现的提示?
28 楼
yuenqing [专家分:60] 发布于 2005-03-20 14:45:00
运行到设置断点的位置处,显示变量的值时,这个数组点击加号时前面的有值,后面的数组元素就没有了而是显示的:Array expansion limited to 1000 nodes
另外什么条件下显示:NaN??
29 楼
mltx [专家分:20880] 发布于 2005-03-20 16:00:00
这不就清楚了吗!就是说,在debug模式中查看数组元素,最多可以查看1000个。这个倒不是错误。
数值超出了机器所能表示的范围,或不是数值,都可能会出现NaN。
30 楼
mltx [专家分:20880] 发布于 2005-04-13 01:24:00
很多人的问题涉及这个主题,我自己顶一下。
我来回复