防止 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 中崩溃的主要内容,如果未能解决你的问题,请参考以下文章
多线程 (pthreads) MATLAB mex 函数导致 MATLAB 在退出后崩溃
使用 fopen 文件时,matlab 在没有转储文件的情况下崩溃