在Unity中捕捉所有异常
我在应用程序商店中有一个Unity移动游戏,并且我有一个函数可以将来自玩家的电子邮件发送到我的服务器,以通知我发生的事情,这不应该发生。如果例如我写的一个try
失败了,我给自己发了封电子邮件看看,肯定有一个bug。在Unity中捕捉所有异常
是否有可能构建类似于OnException处理程序的东西,它会在发生的每个异常中向我发送电子邮件,包括我没有写入的代码?一些例外情况可能来自我使用的插件,所以我想要有某种类型的Listener,它可以处理任何类型的异常。
这可能吗?
您不能捕获其他插件中的所有其他异常。团结确实在后台和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);
}
编辑:
堆栈跟踪问题:
如果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());
}
这很简单,如果有效的话。我会尽快测试它。 – Tavados
当我将来切换到Unity Pro时,这会变得基本上是多余的,因为Unity Performance Reporting为我做这件事,不是吗? – Tavados
如果你有Pro,因为这是在'Unity Performance Reporting'中,所以你不需要这个。请注意,有些公司使用他们的服务器来报告上述代码的错误,即使他们可以使用“Unity Performance Reporting”。当您使用Unity Performance Reporting时,您将依赖于Unity的服务器。如果他们的服务器关闭了,你就拧了。我曾经看到他们的服务器出现故障,就像Amazon服务器出现故障一样。您应该始终让您的应用/游戏不依赖于其他公司的服务器。 – Programmer
退房Hockey App。真的很好的工具,有Unity SDK,并且完全符合你的需求。每个Debug.LogError或Debug.LogException都会在那里报告。因此,您不仅可以收到关于代码例外的通知,还可以通知您缺少一些数据或任何您想报告为错误的内容。
我认为这可能是可能的。你已经尝试了什么? – PJvG