2014-12-07 36 views
0

默認情況下,Eclipse斷點只掛起一個線程。這導致應用程序繼續運行時,我正在考慮斷點。如何在Eclipse中掛起VM斷點後恢復所有線程?

這是斷點的另一種模式 - 掛起整個虛擬機。這會停止所有線程,但顯然我無法恢復執行,或者恢復時的執行行爲不同。

是否有可能在Eclipse中的斷點上進行正常掛起?

UPDATE

有絕對不是我的問題,但是Eclipse/JVM /其他人的錯誤。我做了一個簡單的例子,沒有任何線索的互動:

package tests; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Try_EclipseMultithreadedBreakpoint { 

    private static final Logger log = LoggerFactory.getLogger(Try_EclipseMultithreadedBreakpoint.class); 

    public static class Thread1 extends Thread { 

     public Thread1() { 
      setName("Thread1"); 
     } 

     @Override 
     public void run() { 
      for(int i=0; i<10; ++i) { 
       log.info("tick {}", i); 
       try { 
        Thread.sleep(1500); 
       } catch (InterruptedException e) { 
       } 
      } 
     } 
    } 

    public static class Thread2 extends Thread { 

     public Thread2() { 
      setName("Thread2"); 
     } 

     @Override 
     public void run() { 
      for(int i=0; i<15; ++i) { 
       log.info("tick {}", i); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
       } 
      } 
     } 
    } 

    public static void main(String[] args) { 

     new Thread1().start(); 
     new Thread2().start(); 

    } 

} 

後來我把一個異常進入第二個線程(線程2):

enter image description here

然後,我有幾個斷點命中和恢復,然後刪除斷點並恢復,並吊死申請。

下面是它的懸掛狀態:

enter image description here

爲您輸出看,螺紋1沒有恢復。它只打印一個刻度並停止。而且它並不等待Eclipse報告的一些監視器,它已被暫停。

請注意,我並沒有設置線程1任何斷點,我只在線程2

將它們同時,一些「終結」線程正在等待一些內部資源。

另外,我注意到,在斷點擊中之後,我需要在恢復之前多次按下恢復。

+0

這是併發的性質所示 - 「行爲不同」。但沒有[你的確切問題](http://stackoverflow.com/help/mcve)的描述,這將很難幫助你。 – ursa 2014-12-07 18:25:25

+0

所以你肯定它會因爲cuncurrency的性質而掛起,bun不是由於Eclipse的bug或者什麼的?如果併發性做得好,那麼應該斷點好吧? – 2014-12-08 12:10:08

+0

@ursa看到我的更新請 – 2014-12-08 12:34:57

回答

2

選擇項目上的截圖和按F8 enter image description here

+0

'F6'步進怎麼樣? – 2014-12-08 19:49:53

+0

F6對該選擇沒有影響,您必須選擇具體的螺紋,然後使用F6步進,對於F5和F7也是如此 – outdev 2014-12-08 19:51:45

相關問題