lasterror

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

Примечание

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

Синтаксис

s = lasterror
s = lasterror (допускают ошибку)
s = lasterror ('сбрасывается')

Описание

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

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

сообщение

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

identifier

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

стек

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

Примечание

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

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

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

file

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

имя

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

строка

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

Смотрите Идентификаторы сообщений в документации Основ программирования MATLAB для получения дополнительной информации о синтаксисе и использовании идентификаторов сообщений.

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

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

Примеры

Пример 1

Сохраните следующий код MATLAB в файле под названием average.m 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 часто используется в сочетании с функцией MException.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

Была ли эта тема полезной?