lasterror

Последнее сообщение об ошибке и сопутствующая информация

Совместимость

Примечание

lasterror будет удалено в следующем релизе. Вы можете получить информацию о любой ошибке, которая была сгенерирована путем захвата MException объект.

Синтаксис

s = lasterror
s = lasterror(err)
s = lasterror('reset')

Описание

s = lasterror возвращает структуру s содержащая информацию о последней ошибке, выданной MATLAB®. Возвращенная структура содержит следующие поля:

FieldnameОписание

message

Символьный массив, содержащий текст сообщения об ошибке.

identifier

Символьный массив, содержащий идентификатор ошибки. Если последняя ошибка, выданная MATLAB, не имела идентификатора ошибки, то identifier поле представляет собой пустой символьный массив.

stack

Структура, предоставляющая информацию о местоположении ошибки. Структура имеет поля file, name, и line, и является тем же самым, что и структура, возвращенная dbstack функция. Если lasterror не возвращает информацию о стеке, stack - структура 0 на 1, имеющая те же три поля.

Примечание

Возвращенная структура по lasterror может содержать дополнительные поля в будущих версиях MATLAB.

Поля структуры, возвращенные в stack являются

FieldnameОписание

file

Имя файла, в котором отображается функция, генерирующая ошибку. Это поле является пустым символьным вектором, если нет файла.

name

Имя функции, в которой произошла ошибка. Если это основная функция в файле, и имя функции отличается от имени файла, name задано имя файла.

line

Номер линии файла, в котором произошла ошибка.

Для получения дополнительной информации об идентификаторах ошибок смотрите MException.

s = lasterror(err) устанавливает последнюю информацию об ошибке в сообщение об ошибке и идентификатор, заданные в структуре err. Последующие вызовы lasterror возвращает эту новую информацию об ошибке. Необязательная структура возврата s содержит информацию о предыдущей ошибке.

s = lasterror('reset') устанавливает информацию о последней ошибке в состояние по умолчанию. В этом состоянии message и identifier поля возвращаемой структуры являются пустыми символьными векторами и stack поле представляет собой структуру 0 на 1.

Примеры

Пример 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 структура.

Пример 2

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 может обновить состояние ошибки при любой ошибке, независимо от того, получена она или нет.

Представлено до R2006a