【问题标题】:Debug a mex function in Visual Studio在 Visual Studio 中调试 mex 函数
【发布时间】:2014-07-02 10:21:18
【问题描述】:

我正在尝试将现有 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 的进程。

【问题讨论】:

  • 您可能需要在 MATLAB 启动后附加到 MATLAB 进程
  • 我希望避免这种情况。我找到了一种解决方案。

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


【解决方案1】:

原来<MATLABROOT>\bin\matlab.exe 实际运行<MATLABROOT>\bin\w64\matlab.exe。因此,如果我让 Visual Studio 运行它,就会按预期触发断点。

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

【讨论】:

  • 你能详细解释一下吗?我已经使用 -O 选项编译了 mex 文件,以便它创建 .pdf 文件。我启动 Matlab(在断点处停止),附加到 Visual Studio 2012 中的 Matlab 进程(与 Matlab 相同),运行 Matlab 但它没有命中。任何帮助将不胜感激
  • "MATLABROOT>\bin\ win64 \matlab.exe" 在我的机器上
【解决方案2】:

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

  • 编译源 MEX 文件并启用调试符号。
  • 在 Visual Studio 中打开源 C/C++ 文件,并放置一个断点。
  • 开始正常的 MATLAB 会话。然后从 Visual Studio 中附加到正在运行的 matlab.exe 进程。
  • 最后从 MATLAB 运行 MEX 函数。您应该在执行暂停的情况下命中断点。

【讨论】:

  • 是的,但这会再次进行调试,在修复代码后,更多涉及 - 我必须从 MATLAB 中卸载 DLL,重新加载并再次运行代码。
  • 公平点,我也经常对此感到恼火。有时即使在卸载 MEX 函数 (clear mex) 之后,符号文件 *.PDB 仍会被 MATLAB 进程锁定,迫使我重新启动 MATLAB...
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多