捕获Unity中的所有异常

Tav*_*dos 2 c# unity-game-engine

我在应用程序商店中有一个Unity手机游戏,我有一个功能,可以将玩家的电子邮件发送到我的服务器,通知我发生的事情,这不应该发生.如果try我编写的内容失败了,我会给自己发一封电子邮件,看看肯定有错误.

是否有可能,像OnException处理程序一样构建一个发送每个发生的异常的电子邮件,包括我没写的代码?一些例外可能来自我使用的插件,所以我想有一些Listener,当任何类型的异常被调用时它会起作用.

那可能吗?

Pro*_*mer 7

无法捕获其他插件中的所有其他异常.Unity在后台执行此操作,Unity为您提供API以接收它捕获的异常:

较新版本的Unity:

void OnEnable()
{
    Application.logMessageReceived += LogCallback;
}

//Called when there is an exception
void LogCallback(string condition, string stackTrace, LogType type)
{
    //Send Email
}

void OnDisable()
{
    Application.logMessageReceived -= LogCallback;
}
Run Code Online (Sandbox Code Playgroud)

旧版Unity:

void OnEnable()
 {
     Application.RegisterLogCallback(LogCallback);
 }

 //Called when there is an exception
 void LogCallback(string condition, string stackTrace, LogType type)
 {
     //Send Email
 }

 void OnDisable()
 {
     Application.RegisterLogCallback(null);
 }
Run Code Online (Sandbox Code Playgroud)

还有logMessageReceivedThreaded.

编辑:

Stacktrace问题:

如果stackTrace参数为空,那么您可以使用System.Diagnostics.StackTrace该类在LogCallback函数内部手动检索堆栈跟踪.例如,

void LogCallback(string condition, string stackTrace, LogType type)
{
    //Send Email

    System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace();
    Debug.Log(sTrace.ToString());
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您拥有Pro,则不需要此功能,因为它位于“ Unity Performance Reporting”中。请注意,即使有些公司可以使用“ Unity Performance Reporting”,也可以使用其服务器报告上述代码中的错误。当您使用“ Unity Performance Reporting”时,您将依赖于Unity的服务器。如果他们的服务器宕机,那么您就搞砸了。我已经看到他们的服务器宕机一次,就像Amazon服务器宕机一次一样。您应始终使您的应用/游戏不依赖于其他公司的服务器。 (2认同)