我从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
标记。
答案 0 :(得分:1)
assert()
支持自定义错误消息:
assert(cond,msg)
抛出错误并显示错误消息,msg
,如果cond
为false
。
assert(cond,msg,A1,...,An)
显示包含的错误消息 格式化转换字符,例如与MATLAB®一起使用的字符 如果sprintf
为cond
,则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