调试与 C++/CLI 混合的 Fortran

Debugging Fortran mixed with C++/CLI

我有一个带有 Fortran 控制台应用程序项目(英特尔 Fortran 编译器)和 C++/CLI 库的解决方案 (VS 2015)。我正在通过 Fortran C 绑定调用 C++ 库。

C++ 端的示例函数:

extern "C" __declspec(dllexport) void PrintInteger(const int * const a)
{
  std::cout << *a << std::endl;
}

Fortran端对应函数:

module CplusplusWrapper
  interface
    subroutine PrintInteger(a) bind (C, name = "PrintInteger" )
      use iso_c_binding
      implicit none
      integer (c_int), intent(in) :: a
    end subroutine
  end interface
end module

现在,幸运的是,我让它工作了。我什至可以开始调试 Fortran 应用程序,然后进入调用的 C++ 代码。但是,一旦我将任何托管功能添加到我的 C++/CLI 项目中,它就不再起作用了。它甚至不必在同一个函数中,它可以是一个完全不同的文件...

我已经尝试转到 C++ 项目的属性 -> 配置 -> 调试并将调试器类型设置为 "mixed",但没有效果。

关于如何启用托管代码调试的任何提示?

我找到了解决我的问题的方法,intel website.

中对此进行了描述

创建一个虚拟 C# class 库,它不需要包含任何文件。将此虚拟项目设置为解决方案的启动项目(右键单击 -> 设置为启动项目)。

在 "Debug" 下的新项目选项页面上,将 "Start Action" 从 "Start project" 设置为 "Start external program",然后 select 您的 fortran 可执行文件。再往下,检查选项 "Enable native code debugging".

要在 Visual Studio 中获得正确的构建顺序,请右键单击您的项目,选择 "Build dependencies" -> "Project dependencies" 并勾选您的 Fortran 应用程序。这确保当您点击 "Start debugging".

时,如果 Fortran 应用程序已过时,将首先构建该应用程序

很可能使用任何其他类型的托管项目(VB.NET、C++/CLI、...)作为虚拟项目,但是,我还没有测试过,因为我的解决方案包含 C#无论如何项目。