예외 처리 핸들러 사용법
이 문서는 GameMaker에서 런타임 예외가 발생했을 때 기본 오류 메시지를 대체할 수 있는 방법에 대해 설명합니다. 사용자가 정의한 메서드를 제공하면 예외가 발생할 때 해당 메서드가 호출됩니다. 이 메서드의 첫 번째 인자는 예외에 대한 정보를 담고 있는 구조체(예외 구조체)입니다.
예외 구조체
예외 구조체는 다음과 같은 형식을 가집니다:
변수 이름 | 타입 | 설명 |
---|---|---|
message | String | 예외에 대한 간단한 메시지 |
longMessage | String | 예외에 대한 긴 메시지 |
script | String | 예외가 발생한 스크립트에 대한 설명 |
line | Real | 예외가 발생한 줄 번호 |
stacktrace | Array of Strings | 예외가 발생했을 때의 호출 스택 배열 |
사용자가 undefined
를 인자로 제공하면, 설정된 사용자 정의 예외 핸들러가 제거되고 GameMaker의 기본 오류 메시지로 되돌아갑니다.
이 함수는 이전에 설정된 예외 핸들러 메서드를 반환합니다. 만약 예외 핸들러가 변경되지 않았거나 undefined
로 재설정되었다면, 단순히 undefined
를 반환합니다.
사용자 정의 메서드를 이 함수에 전달하면 사용자에게 오류 메시지가 표시되지 않으며, 예외를 직접 처리할 수 있습니다. 그러나 예외 핸들러가 호출된 후 게임이 계속 실행되는 것은 아니며, 게임은 여전히 종료됩니다.
메서드를 실행하는 컨텍스트는 이벤트가 아니므로, 이 시점에서 화면에 아무것도 렌더링할 수 없습니다. 일반적으로 가장 안전한 방법은 예외 컨텍스트 정보를 파일로 저장하여 다음 게임 실행 시 파싱하고 처리하는 것입니다.
메서드에서 return
문을 사용하면 주어진 값이 정수로 변환되어 실행 코드로 사용됩니다.
구문
exception_unhandled_handler(user_handler);
인자 설명
인자 이름 | 타입 | 설명 |
---|---|---|
user_handler | Method | 예외 핸들러로 사용할 메서드(사용자 정의 함수) 또는 기본값으로 재설정할 때는 undefined |
반환값
반환값 | 타입 | 설명 |
---|---|---|
Method | Method 또는 undefined |
설정된 예외 핸들러 메서드 또는 undefined |
예제 코드
다음은 예외 핸들러 메서드를 생성하고 예외 데이터를 파일로 저장하는 예제입니다:
exception_unhandled_handler(function(ex){
// 출력 로그에 메시지 출력
show_debug_message("--------------------------------------------------------------");
show_debug_message("Unhandled exception " + string(ex));
show_debug_message("--------------------------------------------------------------");
// 예외 구조체를 파일에 기록
if file_exists("crash.txt") file_delete("crash.txt");
var _f = file_text_open_write("crash.txt");
file_text_write_string(_f, string(ex));
file_text_close(_f);
// 오류 메시지 표시 (디버그 용도)
show_message(ex.longMessage);
return 0;
});
위 코드는 예외 핸들러 메서드를 생성하고 예외 데이터를 파일로 저장하며, 디버그 용도로 긴 오류 메시지를 새 팝업 창에 표시합니다.