捕获Unity中的所有异常

时间:2017-03-22 13:00:20

标签: c# unity3d

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

是否有可能构建类似OnException处理程序的东西,它会向我发送每个发生的异常的电子邮件,包括我没有编写的代码?有些例外可能来自我使用的插件,所以我希望有一些Listener,它可以在任何类型的异常被调用时执行。

这可能吗?

3 个答案:

答案 0 :(得分: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;
}

较早版本的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);
 }

还有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());
}

答案 1 :(得分:0)

尝试此解决方案,应该适合您的情况:

http://answers.unity3d.com/questions/47659/callback-for-unhandled-exceptions.html

答案 2 :(得分:-1)

结帐Hockey App。非常好的工具,拥有Unity sdk并完全满足您的需求。每个Debug.LogError或Debug.LogException都会在那里报告。因此,您不仅可以收到有关代码异常的通知,还可以收到一些数据缺失或您要报告为错误的任何内容。