Последнее сообщение об ошибке и сопутствующая информация
Примечание
lasterror не рекомендуется. Используйте MException вместо этого. Для получения дополнительной информации см. Вопросы совместимости.
s = lasterror
s = lasterror(err)
s = lasterror('reset')
s = lasterror возвращает структуру s содержа информацию о новой ошибке, выпущенной MATLAB®. Возвращенная структура содержит следующие поля:
| Имя поля | Описание |
|---|---|
| Символьный массив, содержащий текст сообщения об ошибке. |
| Символьный массив, содержащий идентификатор для ошибки. Если последняя ошибка, выпущенная MATLAB, не имела никакого ошибочного идентификатора, то |
| Информация о предоставляющем структуры о местоположении ошибки. Структура имеет поля |
Примечание
Возвращенная структура lasterror может содержать дополнительные поля в будущих версиях MATLAB.
Поля структуры возвращены в stack
| Имя поля | Описание |
|---|---|
| Имя файла, в котором появляется функция, генерирующая ошибку. Это поле является пустым символьным вектором, если нет никакого файла. |
| Имя функции, в котором произошла ошибка. Если это - первичная функция в файле, и имя функции отличается от имени файла, |
| Номер строки файла, в котором произошла ошибка. |
Для получения дополнительной информации об ошибочных идентификаторах, смотрите 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
dbstack | lastwarn | rethrow | assert | error | MException | MException.last | try, catch