我一直在試圖獲得在移動設備上運行時打印堆棧跟蹤的可靠方法。我碰到System.Environment.StackTrace
跳過堆棧跟蹤中顯示的特定方法
來到我想的東西有3類現在:
public class Test : MonoBehaviour {
public static void Do() {
Test3.ActionThing(() => {
Test2.DoSomethingElse();
});
}
}
public class Test2 : MonoBehaviour {
void Start() {
Test3.ActionThing(() => {
Debug.Log("Start execution");
Test.Do();
});
}
public static void DoSomethingElse(){
Test3.ActionThing(() => {
var a = 0;
a = int.Parse("s1");
});
}
}
public class Test3 : MonoBehaviour {
public static void ActionThing(Action act){
try{
if (act != null)
act();
}catch(Exception e){
Debug.LogError("Error occured " + e.Message);
Debug.LogError("StackTrace was " + Environment.StackTrace);
}
}
}
我得到當錯誤被拋出
StackTrace was at System.Environment.get_StackTrace() in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Environment.cs:line 227
at Test3.ActionThing(System.Action act) in <ProjectPath>\Test3.cs:line 13
at Test2.DoSomethingElse() in <ProjectPath>\Test2.cs:line 14
at Test.<Do>m__0() in <ProjectPath>\Test.cs:line 8
at Test3.ActionThing(System.Action act) in <ProjectPath>\Test3.cs:line 10
at Test.Do() in <ProjectPath>\Test.cs:line 7
at Test2.<Start>m__0() in <ProjectPath>\Test2.cs:line 9
at Test3.ActionThing(System.Action act) in <ProjectPath>\Test3.cs:line 10
at Test2.Start() in <ProjectPath>\Test2.cs:line 7
UnityEngine.Debug:LogError(Object)
Test3:ActionThing(Action) (at Assets/Test3.cs:13)
Test2:DoSomethingElse() (at Assets/Test2.cs:14)
Test:<Do>m__0() (at Assets/Test.cs:8)
Test3:ActionThing(Action) (at Assets/Test3.cs:10)
Test:Do() (at Assets/Test.cs:7)
Test2:<Start>m__0() (at Assets/Test2.cs:9)
Test3:ActionThing(Action) (at Assets/Test3.cs:10)
Test2:Start() (at Assets/Test2.cs:7)
顯然,這堆棧跟蹤,因爲我想這是一個在發佈版本中調試,它不會顯示內部堆棧跟蹤,只顯示消息。
但問題出在堆棧跟蹤本身,它甚至打印方法at Test3.ActionThing(System.Action act) in <ProjectPath>\Test3.cs:line 10
。我想跳過堆棧跟蹤中顯示的內容。
任何幫助表示讚賞,謝謝提前。如果問題似乎太長,請建議編輯:)
?處理'Environment.StackTrace'並刪除不需要的行將是一件簡單的事情,但它不清楚是什麼讓一些行可以接受,而其他的不行 –
該方法的一般想法是通過它路由所有代碼,以便如果它拋出錯誤,我可以在1個地方看到/打印它們。但是如果被調用的方法鏈太長,並且所有東西都通過所述方法進行路由,那麼這個字符串會很長,並且會使得錯誤不易於快速理解,以及不必要的堆棧條目 – Shraa1
我認爲你不會'不想'System.Environment.get_StackTrace()'? –