c++ 如何从C#调试到Fortran代码?

0g0grzrc  于 2023-07-01  发布在  C#
关注(0)|答案(1)|浏览(163)

我有一个用于数值建模的混合语言类库。它是C#调用使用C++ Package Fortran库创建的本机DLL。我的解决方案包含一个单元测试项目,我可以从C#调试到C++和Fortran。我有一个特定的单元测试,它比较了不同类库的建模结果。第二个库有C#直接调用Fortran。这是第二个图书馆给我带来了问题。我已经能够在调试模式下使用C#项目的“启用本机代码调试”来编译第二个库的大部分DLL。我还启用了“只是我的代码”,以避免通过Microsoft代码进行调试。我可以从我的单元测试进入第二个库的C#层。当我到达唯一的Fortran调用时,我的step into就结束了。在单步执行之后(而不是之前),我可以在模块窗口中看到我试图单步执行的Fortran DLL。它将作为用户代码列出,并且正确引用了pdb文件。我已经强制调试器第二次运行Fortran,但它仍然不会介入。我已经不知道要检查什么才能让调试工作正常进行了。
我没有将第二个库中的项目包含到我的解决方案中。我只是从一个目录中提取已编译的DLL。
我正在使用VS 2019 16.11.18和英特尔Fortran 2019.6.324
编辑:一些细节。
我没有在我的解决方案中包含第二个库中的代码,因为它使用的Fortran源代码是从我的原始源代码修改的,并且不兼容。修改它的团队没有考虑与其他用户和应用程序的兼容性。
更新6/13/2023:
我从单元测试中获取代码并创建了一个简单的应用程序。它有一个运行按钮,所以我可以在运行数值的同时单独启动程序,还有一个控制台来监视输出。我试过启动程序,然后使用类库中的debug -> attach。然后,我可以运行计算,并看到调试器单步执行库中的C#,但它不会单步执行Fortran。我确实在Fortran中设置了断点。当我将鼠标移到它们上时,它说符号未加载。它处于调试模式,并且启用了调试本机代码。

pxyaymoc

pxyaymoc1#

我终于想出了一个解决方案。我没有从库解决方案中运行单元测试,而是在包含需要调试的DLL的解决方案中创建了一个单元测试项目。除了单元测试之外,我还必须将42个类从我的库中移到新的单元测试项目中。一旦我正确地构建了单元测试,我发现每次运行单元测试时,我都必须手动复制3个Intel Fortran DLL到运行单元测试的文件夹中。最后一个难题是我必须在管理模式下运行Visual Studio。这不是我在自己的解决方案中调试本机代码时必须做的事情。我不知道为什么需要管理员模式。

相关问题