fortran调试过程中 出现这样的错误 该怎么做
2个回答
展开全部
这个错误是无法执行的数学计算,提示是sqrt,也就是说无法开方,可能原因是需要开方的数是一个负数,或者无限大的正数或无限小的负数,由于fortran并不会说当出现无限大或无限小的数就报错,所以可能在执行到这一步之前数已经出错了,这一错误不属于语法错误而属于逻辑错误,需要耐心调试,说说我调试的一些常用技巧:
1. 首先要找到程序出错的地方,因为程序提示sqrt计算出错,所以你可以在程序里面搜一搜哪里使用了开方运算,然后在这之前和之后设置一些记号,例如
write(*,*) 'aaa'
write(*,*) 'bbb'
等等,根据这些输出是否执行来判断程序执行到哪一步出错
2. 跟踪变量的值的变化,比方说你检测到变量x的值变成了负数或者无穷大,那么你就在程序的不同位置输出x的值,最好记录在文件中方便检查
open(5,file='debug.txt')
write(5,*) x
... ! 代码
write(5,*) x
... ! 代码
有些编译器,诸如matlab,intel fortran有提供比较方便的办法跟踪变量的值,但是思路是一样的
说白了就这么两招,但一般的bug都是这么找出来的,关键是耐心和细心,不要怕浪费时间,一个程序调试的时间远远超过写程序的时间是很正常的,祝好运
1. 首先要找到程序出错的地方,因为程序提示sqrt计算出错,所以你可以在程序里面搜一搜哪里使用了开方运算,然后在这之前和之后设置一些记号,例如
write(*,*) 'aaa'
write(*,*) 'bbb'
等等,根据这些输出是否执行来判断程序执行到哪一步出错
2. 跟踪变量的值的变化,比方说你检测到变量x的值变成了负数或者无穷大,那么你就在程序的不同位置输出x的值,最好记录在文件中方便检查
open(5,file='debug.txt')
write(5,*) x
... ! 代码
write(5,*) x
... ! 代码
有些编译器,诸如matlab,intel fortran有提供比较方便的办法跟踪变量的值,但是思路是一样的
说白了就这么两招,但一般的bug都是这么找出来的,关键是耐心和细心,不要怕浪费时间,一个程序调试的时间远远超过写程序的时间是很正常的,祝好运
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询