exception_unhandled_handler

当运行时异常发生时,此运行时函数可用于 "接管" 默认的GameMaker错误消息。您提供了一个在异常发生时调用的方法或函数,其第一个参数将是包含异常信息的结构(称为异常结构)。此结构具有以下格式:

异常结构
变量类型描述
messageString异常的短消息
longMessageString异常的较长消息
scriptString描述异常来源的字符串
lineReal异常来源的行号
stacktraceArray of Strings生成异常时作为帧的调用栈的字符串数组

您还可以提供undefined作为参数,这将删除自定义异常处理程序(如果已设置)并恢复为GameMaker的默认错误消息。

此函数将返回先前设置的异常处理程序方法,但如果它从未更改或之前使用undefined重置,则它将仅返回undefined

向该函数传递方法意味着不会向用户显示错误消息,并且您将被允许自己处理异常。但是,您不能用这个"突破"异常来继续游戏,因为在调用异常处理程序之后游戏仍将关闭。当游戏在崩溃后需要关闭时,您也不能调用使游戏运行时间长于最终帧的函数(例如game_restart())。

请注意,运行方法的上下文在事件中不是,因此此时无法向屏幕呈现任何内容。一般来说,此时可以做的最安全的事情是保存一个包含异常上下文信息的文件,以便在下一次运行游戏时对其进行分析和处理,然后进行处理。

请注意,如果在提供的方法中使用return语句,则给定值将转换为整数,并用作运行程序的exit代码。

 

语法:

exception_unhandled_handler(user_handler);

参数类型描述
user_handlerMethod要用作异常处理程序的方法(用户定义的函数),或undefined将其重置为默认值。

 

返回:

Method (or undefined)

 

例子:

exception_unhandled_handler(function(ex)
{
    // Print some messages to the output log
    show_debug_message( "--------------------------------------------------------------");
    show_debug_message( "Unhandled exception " + string(ex) );
    show_debug_message( "--------------------------------------------------------------");

    // Write the exception struct to a file
    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 the error message (for debug purposes only)
    show_message(ex.longMessage);

    return 0;
});

上面的代码将创建一个异常处理程序方法,并使用它来保存包含异常数据的文件。出于调试目的,它还将在新的弹出窗口中显示长错误消息。