Когда создание исключение MATLAB (объект MException) или печать предупреждающего сообщения или сообщения об ошибке, MATLAB позволяет Вам предоставить идентификатор сообщения, который определяет кроме, Вы бросаете.
Идентификатор сообщения находится в формате:
component:mnemonic
Например, собственный идентификатор сообщения неопределенной переменной MATLAB:
MATLAB:dispatcher:nameConflict
Таким образом, когда Вы используете исключения в своем собственном коде, что Вы используете для идентификатора сообщения? Действительно ли Вы снова используете MATLAB по умолчанию? Составить свое собственное? Что Вы используете для и мнемонических строк компонента?
Я обычно следую этому шаблону для ошибок (или предупреждений) идентификаторы сообщений , где элементы в круглых скобках могут присутствовать или отсутствовать:
(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic
Компоненты:
className
: имя класса, если функция, в которой возникает ошибка, является методом /конструктор.
parentFunction
: если функция, в которой возникает ошибка, является подфункцией в m-файле или вложенной функцией , это будет первичная m- файловая функция или родитель вложенной функции соответственно. Таким образом, у вас может быть несколько компонентов parentFunction
.
functionWhereErrorOccurs
: Название этого компонента говорит само за себя. ;)
descriptiveMnemonic
: Я подчеркиваю описательный . Например, inputError
на самом деле мне ничего не говорит, но notEnoughInputs
дает понять, что я не передал достаточно аргументов. Я всегда использую нижний регистр верблюда для мнемоники, где первая буква слова заглавная, за исключением самого первого слова.
Компоненты className
и parentFunction
могут считаться несколько избыточными, поскольку свойство stack
в MException
class уже определяет полный путь к родительскому m-файлу и номер строки с ошибкой. Однако одна из целей идентификатора сообщения состоит в том, что он позволяет вам однозначно идентифицировать ошибку для целей, отличных от простого поиска источника ошибки.
Допустим, у вас есть функция myFcn
и класс myClass
, который перегружает myFcn
. Если вы сделаете идентификатор сообщения об ошибке для первого сообщения myFcn: maxIterationsReached
, а идентификатор сообщения об ошибке для второго будет myClass: myFcn: maxIterationsReached
, это позволит вам, для Например, установите точку останова с помощью DBSTOP , которая останавливает выполнение только тогда, когда эта ошибка создается myClass \ myFcn
, а не myFcn
. Аналогичным образом, уникальные идентификаторы сообщений warning полезны тем, что вы можете специально выбрать игнорировать предупреждения из конкретных функций, позволяя отображать другие.
Кроме того, вы также можете включить в идентификатор компоненты, указывающие, что функция, в которой возникает ошибка, находится в папке пакета или в частной папке (но это может привести к довольно длинный идентификатор).
В своей работе я использую YMA:(mainFunctionName):(descriptiveMnemonic), где YMA - это просто мои инициалы. Например, все предупреждения и ошибки, вызываемые моей утилитой UIInspect, имеют идентификаторы, подобные YMA:uiinspect:XXX
.