在MEX文件中的断言导致Matlab崩溃
Assertion in MEX file causes Matlab to crash
我在我的c++代码中使用由matrix.h定义的mxAssert
-宏,它可以完美编译。当我调用的mex代码中违反了一个断言时,这个断言导致的不是我的程序崩溃,而是Matlab本身崩溃。我错过什么了吗?这是有意的行为吗?当我查看Matlab的崩溃报告时,导致断言与我的代码提出的断言完全相同-包括我的描述性描述……我是否必须以某种方式运行我的mex代码,以便Matlab能够识别由mex代码引起的断言(类似于try-catch)?可能还有另一种方法可以安全地停止我的mex代码并返回到Matlab提示符。
提前感谢您,任何帮助都是非常感激的!
编辑:使用命令mex -v Temp.cpp -g
编辑:一个最小的例子,使我的matlab膝盖:
#include <matrix.h>
class Temp {
public:
Temp();
virtual ~Temp();
};
Temp::Temp() {
// TODO Auto-generated constructor stub
}
Temp::~Temp() {
// TODO Auto-generated destructor stub
}
extern "C" {
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int foo = 10;
mxAssert(foo==11, "foo is not 10");
}
}
在我的系统(Ubuntu 64)上,它也崩溃了。
我想这是有意义的,因为这就是assert应该做的。
我强烈建议你使用如下格式:
if(error){mexErrMsgTxt("assert failedn");}
否则,我的一个朋友有以下技巧(使用预处理器指令):
#define assert( isOK ) ( (isOK) ? (void)0 : (void) mexErrMsgTxt("assert failedn") )
要打印单个错误字符串,例如myassert(A=B,"A not B")
,您可以稍微增强一下:
#define myassert( isOK,astr ) ( (isOK) ? (void)0 : (void) mexErrMsgTxt(astr) )
他还告诉我,你可以用这样的方法来改进它:
#isOK,__LINE__,__PRETTY_FUNCTION__, __FILE__
…为了打印行号等等
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么所有C++编译器都会崩溃或挂起此代码
- 当我运行MEX文件时,MATLAB崩溃
- MATLAB由于调用库(C++.h文件和FORTRAN.dll)而崩溃
- 当未选择 /CLR时,编译的MATLAB代码崩溃
- 使用fopen for file时,matlab在没有转储文件的情况下崩溃
- 使用mex将一个大矩阵从Matlab传递到C:Matlab崩溃
- matlab调用Findclass JNI崩溃
- 在MEX文件中的断言导致Matlab崩溃
- c++ Mex文件在64位linux上崩溃matlab,但不是32位windows,但程序在matlab外运行良好
- 防止一个MEX文件在MATLAB中崩溃
- mex文件崩溃,如何在MATLAB中使用MATLAB_MEM_MGR