2013-03-27 31 views
2

這開始的地方是我的情況:如何找到其中線程從斷點

  • 我在研究了大量的代碼庫,在Java1.7運行,不是很容易走動,大量的接口,深層繼承樹,很多線程等。
  • 我在某處放置了一個斷點,但是這個對象運行在某個地方產生的線程中。我需要找到那個地方。
  • 有太多的.run()和.start()命中單獨查找(並且由於類有很多類/繼承而難以獲得類的縮小)(但我還不知道代碼庫) )。

所以我的問題是,有沒有辦法,有一個線程停在斷點(intelliJ,但我也可以使用eclipse)來找出它的開始?

感謝

回答

0

我不認爲有辦法擺脫這種沒有一些野蠻迫切的努力。

我會追溯到已啓動的Runnable(通過堆棧跟蹤),然後獲取該類的繼承和接口層次結構,然後在所有這些類上查找run()和start()方法。除非有人繼承了遺產,否則不應該那麼久。

0

打破你的對象的代碼告訴你它是線程和它的調用堆棧可以告訴你哪些Runnable,你應該尋找。我假設你已經得到了這麼多,並且找到對這個Thread/Runnable的所有引用是不夠的。在這種情況下,你可以寫一個包裝類爲java.lang.Thread,做一個instanceof /類型檢查的run()和設置斷點有

1

也許你可以把斷點放入Thread.start()

爲了避免多次調用斷點,可能有必要在條件邏輯中放置斷點,例如檢查全局布爾標誌。例如,您懷疑您的代碼在某個事件發生之前就會調用,並且在事件發生時將全局標誌設置爲true。

0

我認爲首先你必須得到運行的Runnable。這很簡單,因爲它始終是堆棧跟蹤的第一行。 (當然,你需要具體的類而不是定義run方法的類。)一旦你有了類,應該很容易找到實例。然後,它應該很容易遵循線程啓動的地方。我錯過了什麼?