在Visual Studio中调试mex函数

时间:2014-05-14 11:25:32

标签: c++ matlab visual-studio debugging mex

我试图将现有的C ++代码包装到MATLAB可调用函数中。我正在使用Visual Studio 2013 to generate the MEX file。 MEX文件是正确创建的,我可以从MATLAB中调用它并来回传递参数而没有任何问题。

现在我想调试我的C ++逻辑,而我似乎无法让它工作。我已经创建了一个调用我的函数的m脚本,并且在调试时让Visual Studio运行MATLAB - 正如here所述。

当我按F5调试我的MEX文件时,Visual Studio运行MATLAB,然后非常快地退出调试模式,就像MATLAB进程终止一样。在之后几秒钟,MATLAB开始运行代码。就好像运行的MATLAB实例启动另一个实例并终止,使Visual Studio感到困惑。

如何调试MEX功能?

更新:显然,正如here所述,MATLAB正在这样做。添加-wait参数会使Visual Studio等到脚本运行完毕,但我设置的断点不起作用 - 因为正在调试的进程不是加载DLL的进程。

2 个答案:

答案 0 :(得分:3)

结果<MATLABROOT>\bin\matlab.exe实际运行<MATLABROOT>\bin\w64\matlab.exe。因此,如果我要求Visual Studio运行它,则会按预期触发断点。

在调试器下以这种方式运行MATLAB 很多比任何其他方式慢,但至少现在我可以调试我的代码。

答案 1 :(得分:2)

您也可以像往常一样运行MATLAB会话,然后将Visual Studio附加到正在运行的进程中。这在documentation中有更详细的解释。这是一个快速摘要:

  • 在启用调试符号的情况下编译源MEX文件。
  • 在Visual Studio中打开源C / C ++文件,并放置一个断点。
  • 启动正常的MATLAB会话。然后从Visual Studio连接到正在运行的matlab.exe进程。
  • 最后从MATLAB运行MEX功能。你应该在执行暂停时点击断点。