如何在simulink模型使用的matlab脚本中找到哪个断言失败?

时间:2016-12-16 20:24:21

标签: matlab simulink

我从simulink模型调用一些matlab脚本,这些脚本使用assert()。当一个断言失败时,simulink给了我一个完全没用的断言,没有关于断言发生在哪个子系统或脚本的任何细节,更不用说行号了:

An error occurred while running the simulation and the simulation was terminated
Caused by:
An error occurred during simulation of Model block '<blah>/Model'.
Assertion failed.

但是,这只是一个模型块,它包含许多子系统和脚本块和东西。

有关如何找到我的多个断言中的哪一个被触发的任何提示?

不确定是否重要,但所有这些脚本都使用%#codegen标记。

1 个答案:

答案 0 :(得分:1)

assert()支持自定义错误消息:

  

assert(cond,msg)抛出错误并显示错误消息,   msg,如果condfalse

     

assert(cond,msg,A1,...,An)显示包含的错误消息   格式化转换字符,例如与MATLAB®一起使用的字符   如果sprintfcond,则false功能。每个转换字符   msg已转换为值A1,...,An之一。

     

assert(cond,msgID,msg)抛出错误,显示错误消息,   msg,如果cond是,则包含异常的错误标识符   false。标识符使您可以区分错误和   控制当MATLAB遇到错误时会发生什么。

     

assert(cond,msgID,msg,A1,...,An)包含错误标识符   异常并显示格式化的错误消息。

由于您可以访问正在运行的脚本,因此您可以更新它们以包含详细的错误消息。

例如:

>> assert((2+2) == 5)
Assertion failed.

VS。

>> assert((2+2) == 5, 'The rules of The Universe still hold')
Some rules of The Universe still hold