2016-12-16 8 views
0

Я вызываю некоторые скрипты matlab из модели simulink, они используют assert(). Когда утверждение терпит неудачу, Simulink дает мне совершенно бесполезная утверждение, без каких-либо подробностей о том, какие подсистемы или скриптом утверждение происходивших в, не говоря уже номер строки:Как узнать, какое утверждение не выполнено в скриптах matlab, используемых моделью 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

Вы можете не добавлять описательные сообщения в 'assert' вызовов? – excaza

+0

См. Также: статический метод ['MException.last'] (https://www.mathworks.com/help/matlab/matlab_prog/capture-information-about-errors.html#bq9l5bs-1) или [' lasterror' ] (https://www.mathworks.com/help/matlab/ref/lasterror.html) – excaza

+0

HA! Я всегда использовал утверждения Matlab, такие как «C», и, честно говоря, никогда не смотрел, были ли дополнительные аргументы, такие как «errmsg». Это полностью работает для меня! Если вы напишете ответ, я возьму его ... если не появится что-то лучшее. :) –

ответ

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. 

против

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

Ну, это будет раздражать, проходя и аннотируя все мои утверждения, но это хороший обходной путь. Благодаря! –