主题:[原创]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个回复)
31 楼
sunwj [专家分:40] 发布于 2005-04-24 14:53:00
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0xD44 has exited with code 0 (0x0).
The program 'F:\TEST\Debug\TEST.exe' has exited with code 0 (0x0).
我的出现这个东西,是什么意思?大牛指教!谢谢
32 楼
hotrice [专家分:50] 发布于 2005-08-11 10:45:00
绿色三角表示执行完某一段程序(一般为子程序或者函数)后即将执行的代码
红色的数字表示刚刚修改过的变量值
33 楼
asymptotic [专家分:16630] 发布于 2005-09-20 16:24:00
当你有一定基础之后,看编译器提供的帮助文档是最好的,对你的帮助是最大的。
当我看完 彭国伦 的《Fortran95 程序设》计后,知道了一些 Debug 常用的按钮,然后
看了一下 【美】 Chris H.Pappas & William H.Murray, III 的
《C++ 程序调试实用手册》,学到了很多调试的技巧,现在我一般看 CVF 的帮助文档,
这个最有用。
当自己学会了 Debug 后,很多东西就勿需求助于别人了,所谓: 磨刀不误砍柴工!
34 楼
asymptotic [专家分:16630] 发布于 2005-09-20 16:24:00
[em9]
35 楼
johnchain [专家分:10] 发布于 2005-10-25 15:41:00
我照着楼主的提示做了,但设置断点好象不管用,用ctrl+F5,程序一直运行到结束,等待我关闭窗口,什么黄箭头,红字,绿色三角形都没看到.而且不管我把断点设在哪一句上,这是我的版本问题还是操作不对呢?我的试验程序如下:
read *,n
m=1
i=1
10 continue
m=m*i
i=i+1
if(i<=n) goto 10
print *,m
end
36 楼
mltx [专家分:20880] 发布于 2005-10-25 17:53:00
怀疑你是在Release模式下?
如果是,改到Debug模式。
37 楼
johnchain [专家分:10] 发布于 2005-10-25 18:22:00
向天发誓,我是在DEBUG模式下的.
我在BUILD下的configuration中点蓝的是win32 debug,看看没确定按钮,怕不牢靠,又在set default configuration中选择了win32 debug,这回看到了OK按钮,这才放心.但真正DEBUG时还是老方一帖.[em8][em10]
还有,按F5时跳出一个DOS框,WIN的窗口下分列LOCAL和WATCH两个子窗口,但运行完后DOS窗口和两个子窗口马上消失,并跳出一个"Preloaded symbols may not match 某某某文件名"的提示框,按下确定后一切归于平静.难道是没有预载symbols?
38 楼
mltx [专家分:20880] 发布于 2005-10-25 23:40:00
我用的是CVF6.6,所以无法和MSFPS4完全类比。
感觉你是在Debug模式,只要能在断点中断就行了。
39 楼
sunjsjj [专家分:20] 发布于 2006-01-10 11:13:00
为什么我的小黄箭头老指在机器码上,不指在程序上,这样我没法看错误,按了disassembly,显示程序了,但没黄箭头了,还是不知道错误在哪?
还有,想看数组1000个以上的值能看吗?
40 楼
mltx [专家分:20880] 发布于 2006-01-10 21:43:00
第一个问题:这种情况,多半错误出在Windows的函数内,或者系统的函数内。你可是将断点设置在程序的前边,然后单步执行来定位出错语句。
第二个问题:能看到。
我来回复