exponenta event banner

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