在Unity中捕捉所有异常

问题描述:

我在应用程序商店中有一个Unity移动游戏,并且我有一个函数可以将来自玩家的电子邮件发送到我的服务器,以通知我发生的事情,这不应该发生。如果例如我写的一个try失败了,我给自己发了封电子邮件看看,肯定有一个bug。在Unity中捕捉所有异常

是否有可能构建类似于OnException处理程序的东西,它会在发生的每个异常中向我发送电子邮件,包括我没有写入的代码?一些例外情况可能来自我使用的插件,所以我想要有某种类型的Listener,它可以处理任何类型的异常。

这可能吗?

+1

我认为这可能是可能的。你已经尝试了什么? – PJvG

不能捕获其他插件中的所有其他异常。团结确实在后台和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参数为空,那么你可以使用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()); 
} 
+0

这很简单,如果有效的话。我会尽快测试它。 – Tavados

+0

当我将来切换到Unity Pro时,这会变得基本上是多余的,因为Unity Performance Reporting为我做这件事,不是吗? – Tavados

+0

如果你有Pro,因为这是在'Unity Performance Reporting'中,所以你不需要这个。请注意,有些公司使用他们的服务器来报告上述代码的错误,即使他们可以使用“Unity Performance Reporting”。当您使用Unity Performance Reporting时,您将依赖于Unity的服务器。如果他们的服务器关闭了,你就拧了。我曾经看到他们的服务器出现故障,就像Amazon服务器出现故障一样。您应该始终让您的应用/游戏不依赖于其他公司的服务器。 – Programmer

尝试这种解决方案,应该工作你的情况:

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

退房Hockey App。真的很好的工具,有Unity SDK,并且完全符合你的需求。每个Debug.LogError或Debug.LogException都会在那里报告。因此,您不仅可以收到关于代码例外的通知,还可以通知您缺少一些数据或任何您想报告为错误的内容。