【发布时间】:2015-02-20 13:49:28
【问题描述】:
对于调试 Matlab-MEX,这可能会很麻烦,最好有更好的断言能力。在this question about mex-assertions 之后,可以定义一个预处理器makro,它会向Matlab 抛出一个错误并打印一个字符串(主要可以替换mxAssert,它不幸地导致Matlab2011b 崩溃)。
#define myassert( isOK,astr ) ( (isOK) ? (void)0 : (void) mexErrMsgTxt(astr) )
打印文件、行号和调用者函数会更好,从下面的示例断言myassert(A=B,"A not B") 引发! This answer 最初的问题指出它们是预处理器变量:
__LINE__,__PRETTY_FUNCTION__, __FILE__
我们如何使用mexErrMsgTxt 打印这些预处理器变量?
问题是,mexErrMsgTxt() 采用 char* 参数,而不是多个输入,例如 printf(const char *format, ...)。
目前我的想法仅此而已:
- 无法构建函数,因为预处理器变量将具有函数中的值(例如行号)。
- 我不可能编写一个可工作的多行预处理器 makro,它从传递的
string astr创建一个char并将其传递给mexErrMsgTxt()。 Maybe a solution is along these lines. -
hybrid 解决方案具有创建预处理器 makro 的 char 和将其传递给
mexErrMsgTxt()的函数,感觉不像是好的编码实践。
将指定的错误字符串设为可选会非常好。
【问题讨论】:
标签: c++ c debugging mex c-preprocessor