lasterror

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

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

Примечание

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

Синтаксис

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

Описание

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

Имя поляОписание

message

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

identifier

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

stack

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

Примечание

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

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

Имя поляОписание

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