我在應用程序商店中有一個Unity移動遊戲,並且我有一個函數可以將來自玩家的電子郵件發送到我的服務器,以通知我發生的事情,這不應該發生。如果例如我寫的一個try
失敗了,我給自己發了封電子郵件看看,肯定有一個bug。在Unity中捕捉所有異常
是否有可能構建類似於OnException處理程序的東西,它會在發生的每個異常中向我發送電子郵件,包括我沒有寫入的代碼?一些例外情況可能來自我使用的插件,所以我想要有某種類型的Listener,它可以處理任何類型的異常。
這可能嗎?
我在應用程序商店中有一個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