防止 MEX 文件在 MATLAB 中崩溃

Posted

技术标签:

【中文标题】防止 MEX 文件在 MATLAB 中崩溃【英文标题】:Preventing a MEX file from crashing in MATLAB 【发布时间】:2014-07-06 00:28:47 【问题描述】:

我有一个 MEX 文件,我从其他人那里“借来”来帮助我编写半自动核检测算法。问题是 MEX 文件偶尔会导致分段错误。但是,如果代码第二次使用相同的参数运行,那就没问题了。

我希望有一种用于 MEX 文件的 try/catch 成语,但是在我星期六的大部分时间都在寻找一些东西之后,我找不到任何东西。

在这个问题上的任何帮助都会很棒!否则,我将不得不将 .cpp 移植到 MATLAB 中(大约 10,000 行使用数百个依赖项:-()。

【问题讨论】:

而且您不希望任何代码与核相关代码崩溃。它可能会引发战争! 无效代码不仅不会导致段错误,还可能会修改您的 Matlab 进程的随机内存地址,接受无法可靠检测的错误是个坏主意! 你真的别无选择,只能修复代码。正如@Daniel 提到的,并非每个错误都会导致可捕获的异常。它同样可能会无法察觉地破坏 MATLAB 进程地址空间的其他部分。 【参考方案1】:

您使用的是哪个平台?有一些方法可以帮助调试您的 MEX 文件。每当出现分段错误时,您都可以使用 IDE 告诉您它在代码中的哪个位置崩溃了。

以下是 Mac OS 的使用说明:http://www.mathworks.com/help/matlab/matlab_external/debugging-on-mac-platforms.html

这里是 Linux 的说明:http://www.mathworks.com/help/matlab/matlab_external/debugging-on-linux-platforms.html

以下是适用于 Windows 的说明:http://www.mathworks.com/help/matlab/matlab_external/debugging-on-microsoft-windows-platforms.html

注意:反对将 OP 转至场外链接以帮助解决他或她的问题。我通常在我的帖子中包含大部分答案,并提供链接作为参考。因为您没有告诉我您使用的是什么平台,所以我不会为所有平台编写解决方案,因为那样会花费太多时间。因此(我祈祷链接长期稳定),您可以参考适合您平台的链接。

【讨论】:

以上是关于防止 MEX 文件在 MATLAB 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Matlab 在 MEX 函数中崩溃

多线程 (pthreads) MATLAB mex 函数导致 MATLAB 在退出后崩溃

使用 fopen 文件时,matlab 在没有转储文件的情况下崩溃

使用 mex 将一个大矩阵从 Matlab 传递到 C:Matlab 崩溃

Mex 编译函数,用于计算集合交集和差异,不断崩溃

Matlab + Armadillo 和逆矩阵崩溃