mex文件崩溃了,如何在matlab中使用MATLAB_MEM_MGR?

abh*_*mar 5 c++ crash debugging matlab mex

我已经编译了一个c ++代码到MEX文件,但在调用这个MEX文件时,它崩溃了.它在MATLAB中给出以下错误消息:

检测到分段违规

我尝试在C++文件中使用try-catch在catch块中打印消息,比如

try {
    //my code;
}
catch(std::exception &e)
{
    mexPrintf(e.what());
    mexEvalString("drawnow;");
    return;
}
Run Code Online (Sandbox Code Playgroud)

但打印消息不起作用,代码仍然崩溃.

在查看Google时,大多数时候它指向MathWorks提供的某种形式的消息:http://www.mathworks.de/matlabcentral/newsreader/view_thread/25900

它指示设置环境变量"MATLAB_MEM_MGR=debug",但它没有解释如何使用它?有人可以解释一下吗?

SCF*_*nch 4

首先,try/catch 不会捕获分段违规。它只捕获 C++ 异常,而不捕获像 sigsegv 这样的信号。

二、“用” MATLAB_MEM_MGR

  1. 在 OS shell 中将环境变量设置MATLAB_MEM_MGR为“debug”(如 Windows 上的命令提示符或 Unix 上的终端),
  2. 从同一个 shell 运行 MATLAB,
  3. 从该 MATLAB 正常运行您的 MEX 函数。

Q3.5所说,如果 MEX 函数通过(例如)写入超过 MATLAB 分配的内存块的末尾而损坏内存,则 MATLAB 将在释放该内存块时报告损坏情况。

您可能想尝试在调试器下运行 MEX 函数。本技术说明有几个链接描述如何在各种平台上执行此操作。

编辑:以前的链接已失效,这里是最新的文档页面