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

时间:2011-06-01 01:18:30

标签: c++ matlab debugging crash mex

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

  

检测到分段违规

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

其次,要“使用”MATLAB_MEM_MGR

  1. 在OS shell中设置环境变量MATLAB_MEM_MGR为“debug”(如Windows上的命令提示符或Unix上的终端),
  2. 从同一个shell运行MATLAB,
  3. 从MATLAB中正常运行MEX功能。
  4. 如FAQ的Q3.5所述,如果MEX函数通过(例如)写入MATLAB分配的内存块的末尾来破坏内存,MATLAB将报告内存块的损坏情况。释放。

    您可能希望尝试在调试器下运行MEX功能。 This tech note有几个链接描述了如何在各种平台上这样做。

    编辑:上一个链接已死,这是最新的doc page

答案 1 :(得分:0)

删除mexEvalString("drawnow;")。我花了5个小时才弄清楚这一点。