捕获Unity中的所有exception
我在应用程序商店中有一个Unity手机游戏,我有一个function,可以将玩家的电子邮件发送到我的服务器,通知我发生的事情,这不应该发生。 如果我写的try
失败了,我会给自己发一封电子邮件,看看肯定有错误。
是否有可能构建类似OnException处理程序的东西,它会向我发送每个发生的exception的电子邮件,包括我没写的代码? 有些例外可能来自我使用的插件,所以我希望有一些Listener,当任何类型的exception被调用时它会发生。
那可能吗?
您无法捕获其他插件中的所有其他exception。 Unity在后台执行此操作,Unity为您提供API以接收它捕获的exception:
较新版本的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
函数内部手动检索LogCallback
。 例如,
void LogCallback(string condition, string stackTrace, LogType type) { //Send Email System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(); Debug.Log(sTrace.ToString()); }
尝试这个解决方案,应该适用于您的情况:
http://answers.unity3d.com/questions/47659/callback-for-unhandled-exceptions.html
看看曲棍球应用程序 。 非常好的工具,拥有Unity sdk并完全满足您的需求。 每个Debug.LogError或Debug.LogException都会在那里报告。 因此,您不仅可以收到有关代码exception的通知,还可以通知您丢失的某些数据或者您要报告为错误的任何内容。