[英]Assertion in MEX file causes Matlab to crash
我在我的C ++代碼中使用了mxAssert
matrix.h定義的mxAssert -macro ,它完美地編譯了。 當我的被調用的mex代碼中違反了斷言時,這個斷言不會導致我的程序崩潰而是Matlab本身。 我錯過了什么嗎? 這是預期的行為嗎? 當我查看Matlab的崩潰報告時,導致的斷言與我的代碼提出的相同 - 包括我的描述性描述......我是否必須以某種方式運行我的mex代碼,以便Matlab可以識別mex代碼導致的斷言(類似嘗試捕獲)? 可能還有另一種方法可以安全地停止我的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)上,它也崩潰了。
我想這會讓你感覺到,因為這就是斷言應該做的事情。
我強烈建議你使用類似的東西:
if(error){mexErrMsgTxt("assert failed\n");}
否則,我的一個朋友有以下技巧(使用預處理器指令):
#define assert( isOK ) ( (isOK) ? (void)0 : (void) mexErrMsgTxt("assert failed\n") )
要打印單個錯誤字符串,例如myassert(A=B,"A not B")
,您可以稍微增強一點:
#define myassert( isOK,astr ) ( (isOK) ? (void)0 : (void) mexErrMsgTxt(astr) )
他還告訴我你可以使用以下方法改進它:
#isOK,__LINE__,__PRETTY_FUNCTION__, __FILE__
... ...以打印行號等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.