Последнее сообщение об ошибке и сопутствующая информация
Примечание
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