我用visual fortran 64位编程总是出错??

后使用快捷导航没有帐号?
查看: 2819|回复: 16
采用radfrac模拟反应精馏过程,反应选择动力学,但是出现不收敛和质量不守恒的问题..
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
aspen版本:
本帖最后由 soaty 于
00:41 编辑
RT,我用RADFRAC模拟棕榈酸和异丙醇酯化反应指棕榈酸异丙酯的反应精馏过程,先尝试反应部分选择化学平衡模拟,没有错误,再在相同条件下,采用动力学,由于动力学方程的形式和我查到的表达形式不一致,所以用fortran语言编写了动力学方程导入了aspen中,但是运行的时候出现了不守恒和不收敛的问题,我改了迭代次数和迭代方法,以及蒸馏速率,仍然存在这个问题。求问,是什么原因导致的该问题。会不会是fortran那里的代入有问题?如何解决!!!!!!! 附件里有fortran的文件,要用simulation engine生成obj文件。fortran采用的应该是6.5的版本,如截图里所示。 采用化学平衡模拟的时候也出现了不收敛,我改变Distillate rate或者是D/F的比值后就可以收敛了,弄成动力学减小D/F并不能收敛,但之前减小改值可以收敛。&&
水和异丙醇会共沸,求大神帮助谢谢!
已经解决了!感谢楚天湘水的帮助!
(32.18 KB, 下载次数: 0)
23:48 上传
(880 Bytes, 下载次数: 0)
09:52 上传
23:48 上传
点击文件名下载附件
PDF附件请直接右键另存为不要忘记打赏楼主
132.9 KB, 下载次数: 75
23:49 上传
点击文件名下载附件
PDF附件请直接右键另存为不要忘记打赏楼主
10.3 KB, 下载次数: 53
09:52 上传
点击文件名下载附件
PDF附件请直接右键另存为不要忘记打赏楼主
122.33 KB, 下载次数: 90
本帖被以下云收藏推荐:
& |主题: 37, 订阅: 3
☆评分是一种美德,请多多评分☆
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关;
2、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任;
3、本帖部分内容转载自其它媒体,但并不代表赞同其观点和对其真实性负责;
4、如本帖侵犯到任何版权问题,请立即联系本站或,本站将及时予与删除并致以最深的歉意;
5、管理员和版主有权不事先通知发贴者而删除本文。
&成长值: 14465群组:&
兄弟啊,来看看这个帖子可以解决不。
&成长值: 9695群组:&
反应精馏以前也模拟过一次,貌似也是出了一些问题
,呵呵,惭愧啊,其实我也懂的不多。
楼主能不能简单介绍下这个反应,有没有共沸生成?还有能不能把动力学方程贴出来,这样方便大家讨论
我把动力学传到附件里了,还有异丙醇和水是共沸体系。麻烦你看一下是什么原因。另外fortran语言不是我编写的,是我的导师编的,所以这一块的问题并不是很清楚。&
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
@tdl522 ,呵呵,惭愧啊,其实我也懂的不多。
楼主能不能简单介绍下这个反应,有没有共沸生成?还有能不能 ...
我把动力学传到附件里了,还有异丙醇和水是共沸体系。麻烦你看一下是什么原因。另外fortran语言不是我编写的,是我的导师编的,所以这一块的问题并不是很清楚。
看了楼主的动力学子程序,发现有这样一句话RATNET=RATE*REALB(1)*1.D-03,但我打开楼主的BKP文件里面并没有看到realb这个值,楼主的动力学子程序是从RAMTBE的那个子程序改过来,可能没有读懂那个程序,这个地方没有修改。
如果楼主真的需要用到动力学子程序的话,建议楼主把手册认真读个几遍吧,还有楼主写fortran程序的时候最好用个fortran语言的编辑器,这样可以避免很多语法错误。感觉楼主的PARAMETER(K_IPA=1)这句话跑到前面去了,aspen中用的fortran还是老版本,前面6个字符都不会编译。
今天我的编译器出了问题,没办法调试楼主的程序,楼主修改下那句话,试试吧。
谢谢,我也感觉可能是FORTRAN的问题,不过我完全不懂这一块,是导师编的。这个fortran的版本也是导师电脑上的。那我先安装新版本的fortran试试可否。&
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
看了楼主的动力学子程序,发现有这样一句话RATNET=RATE*REALB(1)*1.D-03,但我打开楼主的BKP文件里面并没有 ...
谢谢,我也感觉可能是FORTRAN的问题,不过我完全不懂这一块,是导师编的。这个fortran的版本也是导师电脑上的。那我先安装新版本的fortran试试可否。
不是安装新版本fortran的问题,aspen中的fortran就是这个样子的&
谢谢,我也感觉可能是FORTRAN的问题,不过我完全不懂这一块,是导师编的。这个fortran的版本也是导师电脑 ...
不是安装新版本fortran的问题,aspen中的fortran就是这个样子的
哦~明白您的意思了。那这个问题怎么解决啊。不懂。我以为是我安装的fortran的问题呢。&
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
不是安装新版本fortran的问题,aspen中的fortran就是这个样子的
哦~明白您的意思了。那这个问题怎么解决啊。不懂。我以为是我安装的fortran的问题呢。
和楼主讨论了下,子程序已经修改好了,不收敛是因为共沸的问题,大家都来帮帮忙吧。
感谢帮忙,下午的时候已经可以运行错误了。只是很奇怪,生成物水和酯均是从塔底出来,而塔顶出来的水很少,理论上水应该从塔顶出来啊。 我猜想是否与进料温度有关。略微试了下,结果还是不行。恳请回复~~&
感谢兄弟修改子程序,现已调收敛。&
马蹄金 +15
非常给力的回复
&成长值: 14465群组:&
和楼主讨论了下,子程序已经修改好了,不收敛是因为共沸的问题,大家都来帮帮忙吧。
感谢兄弟修改子程序,现已调收敛。
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
和楼主讨论了下,子程序已经修改好了,不收敛是因为共沸的问题,大家都来帮帮忙吧。
感谢帮忙,下午的时候已经可以运行错误了。只是很奇怪,生成物水和酯均是从塔底出来,而塔顶出来的水很少,理论上水应该从塔顶出来啊。 我猜想是否与进料温度有关。略微试了下,结果还是不行。恳请回复~~
识途老马, 积分 759, 距离下一级还需 241 积分
识途老马, 积分 759, 距离下一级还需 241 积分
请问你用那个版本的fortran编译器可以吗?是不是版本不能太高啊?我用的inter visual fortran2011,总是出现如下图的错误:
(44.95 KB, 下载次数: 0)
17:36 上传
我用的aspen软件是2010年出的aspen plus v7.2&
识途老马, 积分 759, 距离下一级还需 241 积分
识途老马, 积分 759, 距离下一级还需 241 积分
请问你用那个版本的fortran编译器可以吗?是不是版本不能太高啊?我用的inter visual fortran2011,总是出 ...
我用的aspen软件是2010年出的aspen plus v7.2
刚才那个问题解决了,谢谢了,可以配套&
恩。我用的fortran是以前版本的,好像是6.5的。aspen我用的v7.1&
加鞭快马, 积分 50, 距离下一级还需 250 积分
加鞭快马, 积分 50, 距离下一级还需 250 积分
我用的aspen软件是2010年出的aspen plus v7.2
恩。我用的fortran是以前版本的,好像是6.5的。aspen我用的v7.1
识途老马, 积分 759, 距离下一级还需 241 积分
识途老马, 积分 759, 距离下一级还需 241 积分
我用的aspen软件是2010年出的aspen plus v7.2
刚才那个问题解决了,谢谢了,可以配套
过河小马, 积分 25, 距离下一级还需 25 积分
过河小马, 积分 25, 距离下一级还需 25 积分
借楼主的程序来学习学习
&下次自动登录
用其他账号登录:
马后炮化工mahoupao.net·免责声明
马后炮化工提供网上进行化工学习和交流平台,谢绝讨论政治敏感话题,所有个人言论并不代表本站立场,与本站立场无关,本站不对其內容负任何责任。马后炮化工是非营利性化工交流网站,旨在进行个人化工学习和交流。论坛部分文章和资料均从网上搜集整理,由热心网友自由上传,版权归原作者所有,只做为交流学习之用,不得用于商业用途,法律后果自负。目的是发扬自由与共享的互联网精神,条件许可请支持正版。如您(单位或个人)认为本网站某部分内容有侵权嫌疑,敬请立即联系我们,我们将在第一时间予以更改或删除。谢谢合作!站长联系QQ:,客服联系QQ: Email:admin#mahoupao.net
Powered byFAQ之 常见错误 - Fortran教程 - Fortran Coder 程序员聚集地
FAQ之 常见错误
13:45:35&&&来源:Fcode研讨团队&&&评论: 点击:
本文从编译错误,链接错误,运行时错误,计算结果错误等四个方面介绍了常见的错误及解决思路。适合初学者阅读。
首先应该明确:错误有哪几种?我们当前遇到的是何种错误?
阐述这些问题前,我们先讨论一下常规的应用程序开发的过程:
1&&编写代码,使用一个或多个源代码文件。
2&&对第一步的每一个源代码文件执行编译操作。得到一个或若干个目标代码。
3&&将目标代码,运行时库(Run-time Library)和其他使用到的函数库链接起来。得到一个可执行文件(EXE 或其他)
4&&编写程序的说明书,必要的(输入)数据文件
5&&将上述得到的结果发布给用户。(发布的方式可以是刻录成光盘,销售,放在网站上供别人下载,或者其他)
6&&用户得到程序后,运行,输入数据,得到计算结果。
对于很多 Fortran 程序员来说,可能用户就是自己,也可能仅仅是自己教研室的同事同学。所以第4,5,6步骤很多时候不明显。而如果使用集成开发环境(IDE)进行开发,第1,2,3步骤又可以一键完成。因此,很多初学者就认为,写程序就是:输入代码,运行,得到结果。这样的理解太狭义。
不管我们面对什么使用者来写代码,程序开发应该是上述的过程。我们的编译器,编译环境,也是为这个过程而设计的。
于是,我们将错误分为四种:
一. 编译错误(发生在第2步)
& &&编译错误,一般是源代码书写格式不正确,不符合语法要求。
二. 链接错误(发生在第3步)
& &&链接错误,一般是源代码结构不完整,运行时库或函数库使用不合理。
三. 运行时错误(发生在第6步)
& &&运行时错误,一般是执行代码时,遇到了事先未料及的错误。比如内存不足了,磁盘空间不够了,输入文件格式不对了,输出文件写入失败了等等。
四. 计算结果不符合预期(程序代码不规范,或不符合你的设想)
& &&计算结果不符合预期,可能性就很多了。语法与你的想法不一致,超出函数库的适用范围,执行流程控制不当等等。
这四种错误,其排查难度依次增大。也就是,编译错误最容易排查和修改,而计算结果不正确,最让人头疼。
不管是阅读本文,还是在网络上求助,抑或是与其他程序员交流。首先一定要弄清楚,自己遇到的,是哪一种错误。如你使用的是&IDE&方式开发,具体不知道是第一种还是第二种错误,应该尝试手动编译代码,手动链接程序,看错误发生在哪一步。使用一键&Build&可能会让初学者搞不清楚。
对于前三种错误,一定要找到错误提示,这对于你解决问题至关重要!
另外需要说明的是,对于同样的错误,不同的编译器给出的提示可能也是不一样的。下面都以Compaq&Visual&Fortran&和&Intel&Visual&Fortran&举例。其他编译器提示应该类似。
一. 编译错误
编译错误经常让初学者感到恐怖,因为动辄几十几百乃至上千个错误。然而实际上,错误可能并没有那么多。这是因为编译器对代码进行构析,遇到错误后,会严重影响接下来的分析,导致将本来正确的写法认为是错误。
所以,对于编译错误,一定先解决第一个。然后重新编译,然后再解决新的第一个。直到顺利编译为止。
编译错误,在&IDE&环境下一般可通过双击切换到错误所在行。在命令行下也会显示错误所在的行数。
Q0001:【CVF】Severe: Invalid argument , Error executing df.exe
编译错误提示类似于:
f90: Severe: Invalid argument
... file is 'C:\?D??\fcode.f90'
Error executing df.exe
原因:这是由于&Compaq&Visual&Fortran&不支持中文路径下的源代码文件。源代码文件名作为参数(argument)传递给编译器(df.exe)被认为是非法的(Invalid 因为含有中文)。
解决:将源代码文件放入英文路径下重新编译。
Q0002:【CVF / IVF 】Error spawning df.exe 或 The Fortran compiler (ifort.exe) cannot be found.
原因:这多半是由于编译器安装不合适造成的,或者安装时未设置合理的环境变量。执行编译器( df.exe 或 ifort.exe&) 失败或根本找不到。
解决:重新安装编译器(win7/win8 下请不要使用 CVF),注意安装时如选择是否设置环境变量,选Yes。
Q0003:【CVF / IVF 】Unrecognized token '?' skipped
原因:代码中出现了编译器无法识别的字符。
解决:首先检查自己的源代码文件是否为&ANSI&编码,而不是Unicode编码或其他。然后检查错误行,是否存在特殊字符?包括除字符串常量和注释行之外的中文。尤其注意括号,逗号,冒号是否是半角?&
Q0004:【CVF / IVF 】Syntax error
原因:语法错误
解决:语法错误的可能性很多,但凡违反语法规定的写法,都可能出这个错误。认真检查错误行,某些编译器可能会给出更详细的错误提示,翻译一下会更便于查找错误。
Q0005:【CVF / IVF 】Unbalanced parentheses
原因:括号不成对出现,例如 a(3))
解决:检查错误行的括号,确保成对出现。
Q0006:【CVF / IVF 】An unterminated block exists.
原因:If&或&Do&等区块没有结束。
解决:检查&If&是否有&EndIf&对应,Do&是否有&End Do&对应
Q0007:【CVF / IVF 】A specification statement cannot appear in the executable section.
原因:声明语句出现在了执行语句中
解决:所有声明语句必须在所有执行语句前面,即先声明所有变量,然后才有执行语句。调整这些语句的顺序既可。
Q0008:【CVF / IVF 】The type of the actual argument differs from the type of the dummy argument. [SOME].
原因:SOME作为实参,它的的类型与对应的虚参不一致
解决:我们建议所有实参与对应的虚参具有相同的类型,精度,大小和数组上下限。检查一下被提示的变量,其类型精度是否与虚参一致?尤其是没有使用&Implicit&None&的程序单元,默认&IN&规则情况下,容易发生类型不一致。
Q0009:【CVF / IVF 】 Cannot open include file '文件名.inc'
原因:文件名.inc 做为被包含文件,无法打开
1.检查是否存在 文件名.inc;&
2.检查 文件名.inc 是否在你的工程目录(文件夹);
3.检查该文件是否被隐藏了扩展名,有时候我们看起来是 文件名.inc ,其实是 文件名.inc.txt,我建议取消隐藏扩展名设置。方法是 打开我的电脑,工具,文件夹选项,查看,取消&隐藏已知文件扩展名&;
4.检查该文件是否是 ANSI 编码,用记事本打开,文件另存为时既可查看编码,请确保是 ANSI 的,而不是 unicode,utf-8 等;
Q0010:【CVF / IVF 】 Recommended relationship between field width 'W' and the number of fractional digits 'D' in this edit descriptor is 'W&=D+3'
原因:浮点数格式输出符中,W&& D+3。
解决:由于浮点数输出时,需输出至少一位整数,一个小数点,(可能的)一个负号。所以,建议宽度 W 大于小数点后的 D + 3。比如 3.1415,格式为 F6.4,6只比4大2,如果遇到负数,就会无法输出负号。造成 ****** 出现。
注意,这只是一个警告,如果你确定不会有负数,则可以无需干涉。
同理,对于科学计数法,会有 W&=D+7 的要求。比如 3.1415E+35,格式为 ES10.4,10只比4大6,遇到负号无法输出。
Q0011:【CVF / IVF 】 The statement label&?? is referenced but not defined in this scope.
原因:某语句标号的语句被使用了,但没有定义。比如 goto 100,但没有 100 这句标号的语句。
解决:补齐语句标号语句,或者取消对该标号语句的使用。
二. 链接错误
Q1001:&unresolved external symbol _SOME &/ 无法解析的外部符号 _SOME,该符号在函数 _MAIN__ 中被引用
原因:找不到某些函数或子程序。如果这些函数或子程序在函数库中,没有正确被使用。如果&SOME&是数组,可能没有定义为数组,而被编译器误认为是函数。
解决:找到这个函数并添加到工程内,或正确设置函数库并使用,或定义该数组。
Q1002: unresolved external symbol _MAIN__ / 无法解析的外部符号 _MAIN__,该符号在函数 _main 中被引用
原因:找不到主程序。
解决:补充主程序。
Q1003:unresolved external symbol _WinMain@16 / 无法解析的外部符号 _WinMain@16__,该符号在函数 _main 中被引用
原因:找不到&WinMain&主程序。WinMain&是&WinGUI&界面工程所需的函数。
解决:如果你不是刻意的开发windows界面程序,请重新选择&console&工程类型。否则,请补充&WinMain&函数。
Q1004: _MAIN__ already defined in main.obj / _MAIN__ 已经在 main.obj 中定义
原因:MAIN 函数已经在 main.obj&文件中定义过。即,有多个文件中书写了相同名称的函数或主函数。
解决:删除多余的同名函数,或者检查是否重复添加了相同的文件在工程中。
三. 运行时错误
请注意,某些编译器编译后的程序,在发生运行时错误时,会弹出VC++ Runtime Library 的警告框。这是因为这些编译器的 Runtime Library 部分使用了 VC++ 的运行时库。对于这个警告框,基本上得不到有用的信息
相关热词搜索:
The content is distributed under the BSD-style license ,unless specifically noted.
Powered By Gao,Longqin如何在visual studio 2005中编译和连接fortran程序?_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何在visual studio 2005中编译和连接fortran程序?
上传于||文档简介
&&使​用​I​n​t​e​l​ ​V​i​s​u​a​l​ ​F​o​r​t​r​a​n​编​译​连​接​程​序​的​简​要​说​明
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢教你看懂 Intel Fortran 的运行时错误 - Fortran教程 - Fortran Coder 程序员聚集地
教你看懂 Intel Fortran 的运行时错误
17:46:03&&&来源:Fcode研讨团队&&&评论: 点击:
本文详细解释了 Intel Fortran (windows) 编译后运行时错误界面,对寻找了解错误发生原因和位置有指导作用。
第一. 什么是运行时错误?(Runtime Error)
运行时错误,是源代码正确地编译链接后,在执行阶段遇到的错误。几乎没有任何程序可以完全的避免运行时错误。它可能发生在某些意想不到的情况下。比如:磁盘满了,内存不够了,文件被只读保护了,杀毒软件拦截了等等。
当然,做为编程人员在没有正式确定代码合格之前,出现运行时错误,最大的可能,还是代码写得有问题。
第二. Intel Fortran 编译后发生运行时错误是什么样子?
一般来说,IVF发生运行时错误以后,像下面这个样子一样:
通常来说,Visual C++ Runtime Library 这个对话框上的信息对我们没有帮助。这是由于 IVF 的一些运行时库使用了 VC++ 的。咱们可以忽略它。(上图截图也没截完整)
对我们有用的信息,一般在 console 窗口(windows默认为黑色)里显示。
第三. 从运行时错误窗口我们能获得什么信息?
首先我们来看一段代码,它分为两个源代码文件:
main.f90:
program www_fcode_cn
implicit none
call root_call()
end program www_fcode_cn
subroutine root_call()
call step1_call()
End Subroutine root_call
subroutine step1_call()
call step2_call()
End Subroutine step1_call
subroutine step2_call()
integer :: i
read(*,*) i
End Subroutine step2_call
其中 main.f90 书写了主程序,而 sub.f90 书写了若干子程序。在 main 调用了 root_call,然后再调用了 step1_call,最后调用 step2_call,这个函数读入一个整型变量。
当我们运行后,输入一个字母,比如 a,由于 a 无法转换为整型,所以会触发运行时错误。(如上图)
这里也可以看到,代码本身没有问题,但会出现运行时错误。这就是对程序的不恰当使用导致的。(当然我们也可以在代码中予以判断,但常规来说没有这个必要)
上述代码运行后,若输入字母,则会出现运行时错误:
forrtl: severe (59): list-directed I/O syntax error, unit -4, file CONIN$
Image&&&&&&&&&&&&& PC&&&&&&& Routine&&&&&&&&&&& Line&&&&&&& Source
console1.exe&&&&&& & Unknown&&&&&&&&&&&&&& Unknown& Unknown
console1.exe&&&&&& & _STEP2_CALL&&&&&&&&&&&&&&& 11& sub.f90
console1.exe&&&&&& & _STEP1_CALL&&&&&&&&&&&&&&&& 6& sub.f90
console1.exe&&&&&& & _ROOT_CALL&&&&&&&&&&&&&&&&& 2& sub.f90
console1.exe&&&&&& & _MAIN__&&&&&&&&&&&&&&&&&&&& 3& main.f90
console1.exe&&&&&& & Unknown&&&&&&&&&&&&&& Unknown& Unknown
console1.exe&&&&&& 013A031A& Unknown&&&&&&&&&&&&&& Unknown& Unknown
console1.exe&&&&&& 013A046D& Unknown&&&&&&&&&&&&&& Unknown& Unknown
kernel32.dll&&&&&& 771FED5C& Unknown&&&&&&&&&&&&&& Unknown& Unknown
ntdll.dll&&&&&&&&& 772F37EB& Unknown&&&&&&&&&&&&&& Unknown& Unknown
ntdll.dll&&&&&&&&& 772F37BE& Unknown&&&&&&&&&&&&&& Unknown& Unknown
这里大致介绍一下这些信息的含义。
forrtl: severe (59): list-directed I/O syntax error, unit -4, file CONIN$
这是判断运行时错误最主要的信息,翻译一下就知道它的含义了。表示默认格式的输入输出错误。发生在 CONIN$ 通道,在 IVF 里,Console Input(屏幕输入)被称为 CONIN$,类似的 CONOUT$ 表示屏幕输出。
(其他运行时错误,可参考本站的 其中有详细的介绍各种运行时错误。)
Image&&&&&&&&&&&&& PC&&&&&&& Routine&&&&&&&&&&& Line&&&&&&& Source
这句以下是一个表格,它表示调用堆栈。所谓调用堆栈,就是各层次函数的调用顺序。注意它显示的顺序是反的。
它表示表格里显示在最后一行的函数,调用了倒数第二行显示的函数,然后倒数第二行的函数调用了倒数第三行的函数......最后调用了第一行显示的函数。
表格头部的含义:
Image 表示调用发生在哪个目标文件里。console1.exe 就是我们自己的程序。ntdll.dll 和 kernel32.dll 是 windows 的。如果发现有 imsl_dll.dll 或者 mkl_dll.dll 一类的,就说明错误发生在函数库里。
PC 表示调用发生的内存地址(十六进制显示)。它通常对我们没有什么意义。但一般情况下可认为,大于
的,是windows系统所在的范围。小于
的,是我们书写的代码范围。
Routine 表示调用的函数的名称。通常我们只能看到我们自己书写的代码里的名称(可能会被加上下划线之类的),而系统或函数库中的,则显示为 unknown
Line 表示调用时的位置对应于源代码中的行数。同上,也只能看到我们自己书写的代码的范围。其他显示为 unknown
Source 表示调用时的位置对应于源代码的文件名。unknown 同上。
由上图我们可知,错误发生之前的一些事情:
1.首先,ntdll.dll 开始了调用。(这是windows用于加载我们的 console1.exe)这部分很神秘,所以routine,Line,Source都看不见。(^_^除非你有windows的源码)
2.然后,ntdll.dll 调用了 kernel32.dll ,这也是windows用于加载和初始化 console1.exe 的内存映射。很神秘,同上。前两个步骤发生的地址(PC)都很大,说明他们在 windows 的领空内。
3.之后呢,windows调用了我们的程序,但一开始我们依然看不到 routine , line 和 source,因为这个时候,我们的主程序还没有被调入。这个阶段执行的,是 Intel Fortran 为我们准备的运行时库(入口部分)。这部分用于初始化有关 fortran 语法的东西,比如接受命令行参数等等。这部分我们也没有源代码,因此 routine , line , source 都显示为 unknown。从这个步骤开始,发生的内存地址(PC)变低了,已进入我们的程序领空。
4.Intel Fortran 的运行时库准备就绪,调用了我们书写的主程序(routine 为 _MAIN__&),这个调用位于 main.f90 的 第 3 行(call root_call())
5._ROOT_CALL 又调用了 _SETP1_CALL , 发生在 sub.f90 的第 2 行。
6._SETP1_CALL 又调用了 _SETP2_CALL,发生在 sub.f90 的第 6 行。
7._SETP2_CALL 又调用了 未知的函数(unknown),发生在 sub.f90 的第 11 行。
8.未知函数在未知的位置发生了错误。
由源代码 11 行可知,此处使用了 read(*,*) i 语句,这便是上面第7和第8步骤里的未知函数。read 在源代码里虽然是一个语法规定的语句,但编译后,则是一个函数(位于运行时库中),我们无法看到 read 的源代码。
由此,可认定,sub.f90 的第 11 行,read 语句执行出错,错误原因是:list-directed I/O syntax error, unit -4, file CONIN$
调用堆栈,可用于我们排查错误发生的位置。尤其是对于同一个函数,在源代码中多个位置被调用,我们可根据调用堆栈来判断是发生在哪个位置的调用出现了问题。
第四. 补充说明
几点补充:
1.调用堆栈不会显示得很多。如果调用层次太多了,可能只会显示最后几层。
2.如果大量的显示为 unknown,检查一下编译设置,是否为 Debug(而不是 Release),是否开启 Debug 信息等。
3.这里不一定能找出全部错误的位置来,有些问题,还需要进行 Debug 单步调试。
相关热词搜索:
延伸阅读:
The content is distributed under the BSD-style license ,unless specifically noted.
Powered By Gao,Longqin

我要回帖

更多关于 visual fortran下载 的文章

 

随机推荐