2017-03-22 104 views
0

我在應用程序商店中有一個Unity移動遊戲,並且我有一個函數可以將來自玩家的電子郵件發送到我的服務器,以通知我發生的事情,這不應該發生。如果例如我寫的一個try失敗了,我給自己發了封電子郵件看看,肯定有一個bug。在Unity中捕捉所有異常

是否有可能構建類似於OnException處理程序的東西,它會在發生的每個異常中向我發送電子郵件,包括我沒有寫入的代碼?一些例外情況可能來自我使用的插件,所以我想要有某種類型的Listener,它可以處理任何類型的異常。

這可能嗎?

+1

我認爲這可能是可能的。你已經嘗試了什麼? – PJvG

回答

1

不能捕獲其他插件中的所有其他異常。團結確實在後臺和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

0

退房Hockey App。真的很好的工具,有Unity SDK,並且完全符合你的需求。每個Debug.LogError或Debug.LogException都會在那裏報告。因此,您不僅可以收到關於代碼例外的通知,還可以通知您缺少一些數據或任何您想報告爲錯誤的內容。