오류, 경고, 진단

리더와 정규화, 런타임, 경고, 자원 결과는 서로 다른 단계에 속하며 각자 결정적인 채널을 가집니다.

이 페이지는 v1.13을 설명합니다. 현재 매뉴얼인지 여부는 여기에서 확인하세요: /version.json

언제 필요한가요?

코드를 고치기 전에 진단이 어느 단계에서 났는지부터 읽으세요. 리더 오류는 철자를 고치라는 뜻입니다. 정규화 오류는 폼의 모양을 고치라는 뜻입니다. 런타임 오류는 폼 자체는 유효했지만 실행 도중에 실패했다는 뜻입니다.

실행으로 확인하기

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이 아닙니다. 순서를 바꾸거나 진단에 합쳐서도 안 됩니다.

새 코드에는 modulofirst, rest를 쓰세요. 폐기 예정 표기는 호환을 위해서만 계속 실행됩니다.

현재 경계

  • 플랫폼 panic과 빈 크래시, 비결정적 호스트 텍스트는 유효한 게스트 진단이 아닙니다.

다음으로

코드를 정확히 찾아보려면 진단 카탈로그를 여세요. 결정을 내놓기 전에 검증하는 흐름은 오류 가이드에서 보여 줍니다.

진단 카탈로그 · 오류 가이드