언제 필요한가요?
코드를 고치기 전에 진단이 어느 단계에서 났는지부터 읽으세요. 리더 오류는 철자를 고치라는 뜻입니다. 정규화 오류는 폼의 모양을 고치라는 뜻입니다. 런타임 오류는 폼 자체는 유효했지만 실행 도중에 실패했다는 뜻입니다.
실행으로 확인하기
LISPEX
(guard (e (else (error-object-message e))) (car 1))관측 결과
OUTPUT
"car: expected a pair, got 1"예제 읽기
car가 쌍 대신 1을 받아 잡을 수 있는 런타임 오류를 냅니다. guard가 그 오류 객체를 잡아 안정된 메시지를 돌려줍니다. 그래서 프로그램은 호스트 스택 추적을 찍지 않고 문자열 하나를 남기며 정상적으로 끝납니다.
이 순서로 생각하세요
- 런타임 오류는 E3xx 코드와 안정된 템플릿, 결정적인 irritant 표기, 그리고 감싸고 있는 호출 위치를 함께 씁니다.
- 경고는 순서가 있는 관측입니다. 진짜
%호출은modulo를 실행하기 전에 W330을 냅니다. 진짜list-first·list-rest호출은car·cdr를 실행하기 전에 W331을 냅니다. 경고는 소스의 호출 위치마다 한 번만 나고, 같은 이름을 가린 바인딩은 경고하지 않으며, 뒤따르는 연산이 실패해도 경고 기록은 남습니다. - 처음 만난 미처리 오류는 호스트 스택 추적 없이 실행을 중단합니다. 자원 고갈은 잡을 수 있는 E3xx 바깥에 있습니다.
빠르게 고르기
| 분류 | 나타나는 때 | 먼저 할 일 |
|---|---|---|
| E1xx 리더 | 소스가 datum이 될 수 없음 | 강조된 토큰이나 구분자 수정 |
| E2xx 정규화 | 폼의 정적 형태가 잘못됨 | 폼 철자·위치·인자 수 확인 |
| E3xx 런타임 | 평가가 잘못된 연산에 도달 | 이름 붙은 프로시저와 문제 값을 확인 |
| W3xx 경고 | 폐기 예정 표면을 쓰지만 실행은 계속됨 | 알려 준 대체 항목으로 이동 |
| 자원 결과 | 프로필 한도에 도달 | 작업을 줄이거나 맞는 선언 프로필 선택 |
흔한 오해
경고는 stdout이 아닙니다. 순서를 바꾸거나 진단에 합쳐서도 안 됩니다.
새 코드에는 modulo와 first, rest를 쓰세요. 폐기 예정 표기는 호환을
위해서만 계속 실행됩니다.
현재 경계
- 플랫폼 panic과 빈 크래시, 비결정적 호스트 텍스트는 유효한 게스트 진단이 아닙니다.
다음으로
코드를 정확히 찾아보려면 진단 카탈로그를 여세요. 결정을 내놓기 전에 검증하는 흐름은 오류 가이드에서 보여 줍니다.