主题:关于大程序的调试
guanpuwcg3
[专家分:10] 发布于 2011-06-01 16:45:00
解常微分方程组的程序。该程序运行的时候会出错:sqrt函数超定义域。但由于子程序、循环繁多,自己调试的时候一直按F11太累,找不到数值溢出的位置。不知道版内高人有没有什么高级的调试技巧,能迅速找到BUG点。若能直接告知溢出值的所在位置和溢出原因更好。在线等。
该程序无任何外部输入文件依赖,直接粘贴代码即可调试,望DEBUG高人帮忙。。。
回复列表 (共5个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-06-01 16:53:00
看看调用SQRT函数时,括在SQRT里的表达式的关键项,在程序操作关键项代码的若干个地方输出中间结果试试。
板凳
guanpuwcg3 [专家分:10] 发布于 2011-06-01 18:58:00
好的 ,我再试试吧。貌似程序代码的附件没传上来……
3 楼
adda [专家分:1520] 发布于 2011-06-01 22:00:00
[quote]好的 ,我再试试吧。貌似程序代码的附件没传上来……[/quote]
用IVF,出错时自动提示出错代码的行号,以及是哪个变量出的错
4 楼
bshine1225 [专家分:720] 发布于 2011-06-02 10:54:00
sqrt一般在后面的数值为负数的时候出错。
在其前面加3行代码
IF ( A .LT. 0.0) THEN
CONTINUE
ENDIF
B = SQRT(A)
在continue行加一个断点,采用DEBUG模式调试,如果表达式A出现负值,则会在continue出中断,这时候就可以查看A的数值了
5 楼
fortran2008 [专家分:750] 发布于 2011-06-03 08:37:00
你调试时可以看一看循环变量(或循环条件)取到多少时中止了。
我来回复