Последнее сообщение об ошибке и сопутствующая информация
Примечание
lasterror
будет удалено в следующем релизе. Вы можете получить информацию о любой ошибке, которая была сгенерирована путем захвата MException
объект.
s = lasterror
s = lasterror(err)
s = lasterror('reset')
s = lasterror
возвращает структуру s
содержащая информацию о последней ошибке, выданной MATLAB®. Возвращенная структура содержит следующие поля:
Fieldname | Описание |
---|---|
| Символьный массив, содержащий текст сообщения об ошибке. |
| Символьный массив, содержащий идентификатор ошибки. Если последняя ошибка, выданная MATLAB, не имела идентификатора ошибки, то |
| Структура, предоставляющая информацию о местоположении ошибки. Структура имеет поля |
Примечание
Возвращенная структура по lasterror
может содержать дополнительные поля в будущих версиях MATLAB.
Поля структуры, возвращенные в stack
являются
Fieldname | Описание |
---|---|
| Имя файла, в котором отображается функция, генерирующая ошибку. Это поле является пустым символьным вектором, если нет файла. |
| Имя функции, в которой произошла ошибка. Если это основная функция в файле, и имя функции отличается от имени файла, |
| Номер линии файла, в котором произошла ошибка. |
Для получения дополнительной информации об идентификаторах ошибок смотрите MException
.
s = lasterror(err)
устанавливает последнюю информацию об ошибке в сообщение об ошибке и идентификатор, заданные в структуре err
. Последующие вызовы lasterror
возвращает эту новую информацию об ошибке. Необязательная структура возврата s
содержит информацию о предыдущей ошибке.
s = lasterror('reset')
устанавливает информацию о последней ошибке в состояние по умолчанию. В этом состоянии message
и identifier
поля возвращаемой структуры являются пустыми символьными векторами и stack
поле представляет собой структуру 0 на 1.
Сохраните следующий код MATLAB в файле с именем average.m
:
function y = average(x) % AVERAGE Mean of vector elements. % AVERAGE(X), where X is a vector, is the mean of vector elements. % Nonvector input results in an error. check_inputs(x) y = sum(x)/length(x); % The actual computation function check_inputs(x) [m,n] = size(x); if (~((m == 1) || (n == 1)) || (m == 1 && n == 1)) error('AVG:NotAVector', 'Input must be a vector.') end
Теперь запустите функцию. Поскольку эта функция требует векторного входа, передача ей скалярного значения приводит к ошибке. Ошибка возникает в стандартной подпрограмме check_inputs
:
average(200) Error using average>check_inputs (line 11) Input must be a vector. Error in average (line 5) check_inputs(x)
Получите три поля из lasterror
:
err = lasterror err = message: [1x61 char] identifier: 'AVG:NotAVector' stack: [2x1 struct]
Отображение текста сообщения об ошибке:
msg = err.message msg = Error using average>check_inputs (line 11) Input must be a vector.
Отображение полей, содержащих stack
информацию. err.stack
- структура 2 на 1, поскольку она предоставляет информацию о неисправной стандартной подпрограмме check_inputs
а также внешнюю, первичную функцию average
:
st1 = err.stack(1,1) st1 = file: 'd:\matlab_test\average.m' name: 'check_inputs' line: 11 st2 = err.stack(2,1) st2 = file: 'd:\matlab_test\average.m' name: 'average' line: 5
Примечание
Как правило, имя вашей основной функции должно совпадать с именем файла, который содержит эту функцию. Если эти имена различаются, MATLAB использует имя файла в name
поле stack
структура.
lasterror
часто используется в сочетании с rethrow
функция в try, catch
операторы. Для примера,
try do_something catch do_cleanup rethrow(lasterror) end
MathWorks® постепенно переводит обработку ошибок MATLAB в объектно-ориентированную схему, основанную на MException
класс. Хотя поддержка lasterror
ожидается, что он продолжится, используя статическую MException.last
метод MException
является предпочтительным.
Предупреждение
lasterror
и MException.last
не гарантировано всегда возвращать одинаковые результаты. Для примера, MException.last
обновляет свой статус ошибки только при незакрытых ошибках, где lasterror
может обновить состояние ошибки при любой ошибке, независимо от того, получена она или нет.
assert
| dbstack
| error
| lastwarn
| MException
| MException.last
| rethrow
| try, catch