调试Visual Studio中的mex函数

Debug a mex function in Visual Studio

本文关键字:mex 函数 中的 Studio Visual 调试      更新时间:2023-10-16

我试图将现有的c++代码包装成MATLAB可调用函数。我使用Visual Studio 2013来生成MEX文件。MEX文件创建正确,我可以从MATLAB调用它并来回传递参数,没有任何问题。

现在我想调试我的c++逻辑,但我似乎不能让它工作。我已经创建了一个调用我的函数的m脚本,并在调试时使用Visual Studio运行MATLAB -如这里所述。

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

如何调试我的MEX函数?

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

原来<MATLABROOT>binmatlab.exe实际上运行<MATLABROOT>binw64matlab.exe。因此,如果我要求Visual Studio运行它,断点将按预期触发。

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

您还可以像往常一样运行MATLAB会话,然后将Visual Studio附加到正在运行的进程中。这在文档中有更详细的解释。下面是一个简短的摘要:

  • 打开调试符号编译源mex文件
  • 在Visual Studio中打开源C/c++文件,并设置断点。
  • 启动正常的MATLAB会话。然后从Visual Studio中,附加到正在运行的matlab.exe进程。
  • 最后从MATLAB中,运行mex -函数。你应该在暂停执行的情况下到达断点。