Последнее сообщение об ошибке и сопутствующая информация
Примечание
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
MathWorks® постепенно переходит обработку ошибок MATLAB к объектно-ориентированной схеме, которая основана на MException
класс. Несмотря на то, что поддержка lasterror
как ожидают, продолжится, с помощью статического MException.last
метод MException
предпочтительно.
Предупреждение
lasterror
и MException.last
как гарантируют, всегда не возвратят идентичные результаты. Например, MException.last
обновляет его ошибочное состояние только при непойманных ошибках, где lasterror
может обновить его ошибочное состояние при любой ошибке, отловлена ли она или нет.
assert
| dbstack
| error
| lastwarn
| MException
| MException.last
| rethrow
| try, catch