簡體   English   中英

MEX文件中的斷言導致Matlab崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM