主题:[原创]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个回复)
11 楼
yuenqing [专家分:60] 发布于 2005-03-18 11:41:00
不知道
12 楼
mltx [专家分:20880] 发布于 2005-03-18 12:19:00
9楼:红色的数字是执行此步后数值有所改变的数字。
10楼:没见到绿色三角啊。
13 楼
yuenqing [专家分:60] 发布于 2005-03-18 14:54:00
我设置了断点后,一步步的点击程序运行,有些变量的值变红色了然后一会就为0了?
这是怎么回事呢,变量应该有值啊,且是不变的值啊,搞不懂??
14 楼
yuenqing [专家分:60] 发布于 2005-03-18 14:58:00
我设置了断点后,一步一步的进行,有些没参与的变量的值变红色了然后就为0值了,这是怎么回事呢?
15 楼
yuenqing [专家分:60] 发布于 2005-03-18 16:00:00
黄色箭头位置。。。NTDLL! 77f7f570()
WWW! __FF_puterr + 49 bytes
WWW! __FF_mputerr + 920 bytes
WWW! _matherr + 851 bytes
WWW! _87except + 190 bytes
这是什么呢
也看不到箭头所指示的语句呀
16 楼
yuenqing [专家分:60] 发布于 2005-03-18 16:29:00
SKZ(169,5) Array expansion limited to 1000 nodes
矩阵有什么要求呢我
main 里面skz(2500,2500),call(....)时skz(208,208),给解释一下
17 楼
mltx [专家分:20880] 发布于 2005-03-18 19:03:00
回14楼:变红色的值是不是零?不再执行下一步,变量值不应该再改变。
回15楼:这是汇编代码,按一下disassemblage按钮,回到fortran源程序代码。不过有时在系统内部出错时,也有显示不出fortran代码的情况。
回16楼:问题没看懂。可能把相关的源代码贴上来一两句会明白些。
18 楼
yuenqing [专家分:60] 发布于 2005-03-18 19:24:00
显示不出阿
可能是系统内部出错了。
19 楼
yuenqing [专家分:60] 发布于 2005-03-19 14:32:00
STK(1001) Array expansion limited to 1000 nodes
这个怎么解释呢
提示在NTDLL! 77f7f570() 这位置设置断点,我应该怎么找到程序位置??看不到源代码阿?
WWW! __FF_puterr + 49 bytes
WWW! __FF_mputerr + 920 bytes
WWW! _matherr + 851 bytes
WWW! _87except + 190 bytes
WWW! _startOneArgErrorHandling + 41 bytes
WWW! sqrt + 164 bytes
20 楼
mltx [专家分:20880] 发布于 2005-03-19 18:23:00
STK(1001) Array expansion limited to 1000 nodes
不明白这句是什么?是系统给出的错误信息提示?
你是怎么定义的数组STK()?
看不见你的程序代码,很难进一步说什么。
另,从一开始你就单步执行,不会第一句就出错吧,到了哪一句出错,不就把出错语句定位了吗?
我来回复