Main Content

lasterror

가장 최근의 오류 메시지와 관련 정보

lasterror는 권장되지 않습니다. MException을 대신 사용하십시오. 자세한 내용은 호환성 관련 고려 사항 항목을 참조하십시오.

구문

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

설명

s = lasterror는 MATLAB®에서 가장 최근에 발생한 오류에 대한 정보가 포함된 구조체 s를 반환합니다. 반환되는 구조체에는 다음 필드가 포함되어 있습니다.

필드 이름설명

message

오류 메시지의 텍스트가 포함된 문자형 배열입니다.

identifier

오류 ID가 포함된 문자형 배열입니다. MATLAB에서 가장 최근에 발생한 오류에 오류 ID가 없는 경우 identifier 필드는 빈 문자형 배열이 됩니다.

stack

오류의 위치에 대한 정보를 제공하는 구조체입니다. 이 구조체에는 file, nameline 필드가 있으며, dbstack 함수가 반환한 구조체와 동일합니다. lasterror가 스택 정보를 반환하지 않을 경우 stack은 세 개의 동일한 필드를 포함하는 0×1 구조체가 됩니다.

참고

MATLAB의 향후 버전에서는 lasterror에서 반환되는 구조체에 필드가 추가로 포함될 수 있습니다.

stack에서 반환된 구조체의 필드는 다음과 같습니다.

필드 이름설명

file

오류가 발생한 함수가 표시되는 파일의 이름입니다. 파일이 없는 경우 이 필드는 빈 문자형 벡터입니다.

name

오류가 발생한 함수의 이름입니다. 이 함수가 파일의 주 함수이고 함수 이름이 파일 이름과 다르면 name은 파일 이름으로 설정됩니다.

line

오류가 발생한 파일의 라인 번호입니다.

오류 ID에 대한 자세한 내용은 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은 실패한 서브루틴 check_inputs과 바깥쪽 주 함수 average에 대한 정보를 제공하므로 2×1 구조체입니다.

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은 stack 구조체의 name 필드에 있는 파일 이름을 사용합니다.

예제 2

lasterror는 종종 try, catch 문에서 rethrow 함수와 함께 사용됩니다. 예를 들면 다음과 같습니다.

try
   do_something
catch
   do_cleanup
   rethrow(lasterror)
end

확장 기능

스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 축소

R2007b: lasterror는 권장되지 않음

MathWorks®는 MATLAB 오류 처리를 점차적으로 MException 클래스를 기반으로 하는 객체 지향 방식으로 전환하고 있습니다. lasterror는 계속 지원될 것으로 예상되지만 MException의 정적 MException.last 메서드를 사용하는 것이 권장됩니다.

경고

lasterrorMException.last는 항상 동일한 결과를 반환하지는 않습니다. 예를 들어, MException.last는 uncaught error에서만 오류 상태를 업데이트하는 반면, lasterror는 오류의 포착 여부에 관계없이 모든 오류에 대해 오류 상태를 업데이트할 수 있습니다.