假設在一個try
塊中有三個連續的函數調用,並且它們都拋出相同類型的異常。我怎樣才能找出哪個函數調用處理它時拋出捕獲異常?如何確定哪個函數調用在try塊中拋出了特定的異常?
4
A
回答
10
你可以在每一個方法調用中放一個try-catch塊。
或者你看看異常堆棧跟蹤。他們描述了哪一行代碼拋出了異常。
getStackTrace()[0].getMethodName()
編輯:
1
- 老方法:有三個try/catch塊
- 新方法(自1.4):Throwable.getStackTrace()[0]
2
這樣的:
try {
function1();
} catch (Exception e){
// function1 error
}
try {
function2();
} catch (Exception e){
// function2 error
}
try {
function3();
} catch (Exception e){
// function3 error
}
1
所以我猜一下你的代碼,使明顯的解決方案棘手,也許是方法調用的地方是一個或兩個級別下,或不在同一水平?究竟是什麼原因妨礙你保持櫃檯?在任何情況下,您都需要對調用進行計數,使用多個try塊,或者這樣做,並定義您自己的包含缺失信息(和舊異常,因爲它是子類)的異常,然後重新拋出它。
也許你可以使用異常拋出方法繼承對象,以包裝方法調用並實現計數器?
+0
基於混淆的一個是定義一個新的異常好主意謝謝 – dirtybit 2009-08-28 13:46:06
0
我認爲自省堆棧跟蹤來做錯誤處理會在以後非常糟糕的。如果您需要對單獨的行進行單獨的操作,請將它們放在單獨的try-catch塊中。
你也可能只是想要一個簡單的變量保持狀態,所以你可以檢查值,以確定你有多遠。我認爲這會更好。
int state = 0;
try {
step1();
state = 1;
step2();
state = 2;
....
} catch (Exception e) {
if (state == 2) ....
}
編輯:Downvoters,請注意我開始說這是一個壞主意;-)
相關問題
- 1. 在PHP Try Catch塊中拋出異常
- 2. try塊內的Java拋出異常
- 3. try-catch塊內的異常拋出
- 4. 如何確定給定方法可拋出哪些異常?
- 5. 如何使用try catch在x =否定時拋出異常
- 6. 在try catch中拋出一個自定義的異常
- 7. 重新拋出try塊C#異常
- 8. catch塊中的函數拋出異常
- 9. 如何確定「x []」可能拋出哪些異常?
- 10. 這拋出了哪個異常?
- 11. 如何確定哪些函數調用在Python中引發異常?
- 12. 如何確定模塊特定的異常類定義
- 13. 如何在Java中拋出自定義塊異常
- 14. C#明確定義拋出的異常
- 15. 打雜拋出不確定的異常
- 16. everythings似乎確定,但函數retrieveRequestToken()拋出'OAuthCommunicationException'異常
- 17. 確定CoreApplicationView.GetCurrentView()是否會拋出異常?
- 18. 使用Xamarin Insights處理try/catch塊外部拋出的異常
- 19. 如何列出哪個進程加載了特定的模塊?
- 20. 確定在Chrome中調用了哪些javascript函數
- 21. 確定從Julia中導出函數的哪個模塊
- 22. 如何找出哪個程序在Delphi中拋出異常?
- 23. 確定哪些代碼行拋出異常
- 24. 如何使用基於C#中自定義異常構造的函數拋出自定義異常?
- 25. 在R中,如何找出爲特定函數調用分派哪個方法?
- 26. 斷言一個特定的異常在黃瓜拋出
- 27. 在postgresql函數中拋出異常
- 28. 如何知道在哪個庫中定義了特定的函數?
- 29. 如果模塊不是正確的版本,應拋出哪個異常?
- 30. C# - 有沒有辦法確定哪個變量拋出空引用異常?
由於它是非常有幫助的 – dirtybit 2009-08-28 13:39:37