使用Fortran更新的Visual Studio中的负字符长度调试

时间:2013-04-10 16:20:46

标签: visual-studio-2012 fortran intel-fortran

我最近从Windows XP和Visual Studio 2005更新到Windows 7和Visual Studio 2012,并带来了大量的Fortran代码(使用英特尔编译器内置VS)。我现在收到几个可能相关或不相关的错误:

  1. 当调用foo(char1,real1,real2)形式的子例程时,char1在调用子例程和foo中的长度都是200,我得到“forrtl:severe(408):fort: (18):虚拟字符变量'char1'的长度为200,大于实际可变长度-858993460图像PC例程行源libifcoremdd.dll 02AED3FE未知未知未知堆栈跟踪异常终止“我环顾四周,这个数字似乎是十六进制地址(0xcccccccc)转换为整数。为什么要传递一个无意义的地址而不是长度?

  2. 当我尝试调试问题时,我在子程序调用中设置了一个断点,并尝试介入,我得到一个错误“没有源可用没有为任何调用堆栈帧加载符号。代码无法显示“

  3. 我还注意到我得到了几十个“无法找到或打开PDB文件。”错误,这些错误似乎与我的源代码没有直接关系。

  4. 不幸的是,错误被嵌入到数千行专有代码中,因此我无法将其全部发布,并且我无法通过一个简单的示例重现该错误。

    任何人都有任何可以尝试的建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

无符号......源代码都与.pdb文件相关。构建代码时会生成pdb文件。它就像是一张生活在每一行代码所在位置和地点的地图。如果您尝试设置断点并获得填充的红色圆圈,则可以找到pdb。如果你只是得到一个空的灰色圆圈,它找不到pdb文件。将pdb文件从构建代码的位置复制到可执行文件所在的位置,这样可以解决该问题。不幸的是,在复制文件之后,你需要从visual studio出来并重新进入。它不会立即读取pdb。

至于你的未初始化的变量错误(一切都被c填充),你做了一个干净的构建吗?如果你从XP转到W7,它是XP32到W764吗?你刚刚移动了源或对象吗?如果是这样,你的可执行文件是x86 / win32还是x64或两者的位?首先尝试将所有内容构建为x86 / win32。看看这是否有效,然后看看代码生成选项:它们都是MT,MTD,MD还是MDD?它们都应该是一样的。混合它们是一场等待发生的灾难(通常当你向一些高级官员展示时)。