2017-03-08 75 views
-3

我設計一個Eclipse插件,它在發生異常時,從控制檯讀取堆棧跟蹤如何以編程方式讀取源代碼行。其中發生異常

插件基本上是用於基於搜索內容時發生異常。用戶明確地從堆棧跟蹤選擇關鍵字,但隱含插件需要從源代碼中導致異常的行,這樣加在一起的源代碼行和關鍵字,可用於更好的搜索結果。在這種情況下,插件無法更改源代碼。

控制檯給我的文件,包裹和行號,但我想從其中產生異常的源代碼中的相應行。

例如,如果我有一個像

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 0 
at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
at java.util.ArrayList.get(ArrayList.java:429) 
at Test.main(Test.java:13) 

例外,我想從Test.java

的源代碼
+0

**'exception'堆棧跟蹤**提供詳細的堆棧跟蹤發生什麼事,除非你還沒有宣佈它打印出來,爲什麼重新發明輪子? – emotionlessbananas

+0

當發生異常時,插件會被觸發。插件沒有異常對象。插件僅處理來自控制檯的堆棧跟蹤。沒有異常對象,插件如何才能獲得該線。 – kanchan

+0

所以你使用像'org.eclipse.ui.console.consolePatternMatchListeners'?現有的'JavaExceptionConsoleTracker'知道如何從控制檯的異常中打開源代碼。 –

回答

0

您可能大概沒有確切的可重用的代碼行13,但是這個東西你可以探索。

在的Throwable類,你可以訪問堆棧跟蹤元素列表,並從那裏它將會傳播代碼的行數。

注:

有時你可能會在 異常對象得到一個以上的堆棧跟蹤元素,可以到那麼迭代器,並得到你想要 的行號的一個。

喜歡的東西

catch(Throwable e){ 
      e.getStackTrace()[e.getStackTrace().length - 1].getLineNumber(); 
     } 
+0

但我無法訪問修改導致異常的源代碼 – kanchan

+0

您的意思是您要修改插件的源代碼 – mhasan

+0

不,我希望導致異常的行不修改源代碼。對不起英文不好。 – kanchan