Visual Studio 2022 - Fortran - 调试问题

问题描述 投票:0回答:1

我一直在使用 intel OneAPI 编译器在 Visual Studio 2022 中编写 Fortran 代码。代码编译正确并且运行良好。最近,当我尝试调试代码时,我无法在本地或快速监视中查看数组变量的值,并收到消息“未定义地址”或“未定义变量xxx”。其中xxx是全局定义的cell_obj类型变量。

对于前。 cel(i)%nn - 是具有 "i" 个单元格的数量密度数组。当我想在快速监视中查看 cel(30)%nn 处的值时,我收到消息“未定义的变量 cel”。代码运行没有任何问题,并且所有输出文件都正确打印。当我使用 print 语句时我什至可以看到该值,但在调试期间无法快速监视。

过去两年我一直在使用这段代码进行研究,从来没有遇到过最近开始出现的这个问题。我不记得对设置或代码进行过任何更改。另外,根据其他帖子中的一些建议,我确保禁用优化并且项目在调试配置而不是发布配置下运行。

如果您能深入了解这种情况,我将不胜感激。

谢谢你

arrays visual-studio debugging fortran intel-fortran
1个回答
0
投票

您所描述的问题(尽管代码运行正确,但在调试期间无法访问数组变量)可能与调试环境和 Fortran 编译器设置的组合有关。以下是一些可能的原因和解决方案,可帮助解决该问题:


  1. 检查调试符号

确保为您的代码正确生成调试符号。您可能意外丢失了这些设置。

转到 Visual Studio 中的项目属性。

导航到 Fortran > 调试。

确保启用“生成调试信息”选项。通常应将其设置为 Full (/debug:full)。


  1. 优化设置

即使您提到优化被禁用,最好还是仔细检查一下,因为优化会影响调试器中的变量可见性。

在项目属性中,转到 Fortran > 优化。

确保“优化”设置为禁用 (/O0)。


  1. 使用正确的调试器

确保您使用的是英特尔调试器或适用于 Fortran 的兼容调试器。如果您使用默认的 Microsoft 调试器,它可能无法正确处理 Fortran 结构。

检查 Visual Studio 中的工具 > 选项 > 调试,并确保使用正确的调试器。

如果您有权访问英特尔的调试器(OneAPI 的一部分),请尝试显式选择它。


  1. 全局变量访问

如果变量 cel 是全局变量,调试器无法访问它:

确保 cel 在代码中显式声明为全局(例如,使用 COMMON、MODULE 或 USE 语句)。

如果使用 MODULE,请确保模块已正确编译并且对调试器可见。

有时,由于调试器的限制,大型或复杂的全局变量可能无法正确显示。为了缓解这种情况,请考虑简化或重构全局变量的访问方式。


  1. 重建项目

有时,构建工件可能会导致问题。对您的项目执行干净的构建:

在 Visual Studio 中选择“生成”>“清理解决方案”。

然后,使用“构建”>“重建解决方案”重建项目。


  1. 检查调试环境

调试大型或派生类型(如 cel(i)%nn)有时可能会失败,原因是:

调试数据库文件(.pdb 文件)损坏。删除这些文件并重建解决方案。

数组边界检查可能被禁用,导致调试器映射内存的方式混乱。

在 Fortran > 运行时设置中启用数组边界检查。


  1. 检查英特尔 Fortran 编译器版本

英特尔 OneAPI Fortran 编译器的更新或更改可能会导致意外行为。确保您的编译器是最新的:

访问 Intel OneAPI 网站检查更新。

或者,如果更新后出现问题,则恢复到早期版本的编译器。


  1. 解决方法:使用打印报表

虽然不理想,但如果调试器始终无法显示特定变量,请使用打印语句作为解决方法。有时,重组代码或简化表达式也可以帮助调试器更好地处理变量。


  1. 启用详细调试输出

通过在编译器选项中添加 /traceback 或 /check:bounds 等标志来启用详细的运行时调试。这些可以提供更多背景信息并帮助隔离问题。


  1. 联系英特尔支持

如果问题仍然存在,请考虑联系英特尔的支持团队或在其官方论坛上发帖。包括以下详细信息:

Intel Fortran 编译器版本。

Visual Studio 版本。

如果可能的话,最小的重现器代码。

© www.soinside.com 2019 - 2024. All rights reserved.