在Eclipse Debugger中启动后进程挂起

时间:2014-07-24 15:19:05

标签: java eclipse debugging

我正面临Eclipse Debugger的以下问题。我直接从Eclipse开始在调试模式下启动JBoss 5.1(这个过程几乎整天运行而不重启)有时我想用客户端应用程序(Swing + OSGi)启动新的Debug-Sesion或者事件调试一些JUnit-测试eclipse启动过程,但这个新进程立即暂停。当我将Perspective更改为debug时,我可以看到两个进程--JBoss正在运行而没有问题,但是新进程被暂停 - 控制台输出是明确的,进程为Eclipse-Icon提供了挂起的线程。有时它有助于选择此过程并按绿色的“恢复”按钮,有时我必须使用“终止删除”来终止此过程。当我尝试再次运行此过程时,我有时会在相同的情况下运行,有时会毫无问题地运行新进程。

非常奇怪的是,当eclipse“暂停”新的Client-App-process并且我在Debug Perpective中杀死了JBoss进程时,第二个被暂停的进程突然运行。我认为,这两个进程在某种“僵局”情况下运行,但我不知道如何解决这个问题。

我没有任何想法,这个问题的原因是什么...... 我的环境:Eclipse 4.3.2,Java 1.7.0_21-64bit

1 个答案:

答案 0 :(得分:0)

该程序可以帮助您了解您的情况:

class Solution {
    public static ListNode reverseKGroup(ListNode head, int k) {
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode prev = dummyHead, cur = dummyHead;
        while (cur != null) {
            for (int i = 0; i < k; i++) {
                if (cur == null || cur.next == null) return dummyHead.next;
                cur = cur.next;
            }
            ListNode nxt = prev.next;
            prev.next = reverse(prev.next, cur.next);
            prev = nxt;
            System.out.println(prev);
            cur = nxt;
        }
        return dummyHead.next;
    }

    private static ListNode reverse(ListNode head, ListNode tail) {
        if (head == tail || head.next == tail) return head;
        ListNode prev = head, cur = head.next;
        while (cur != tail) {
            ListNode nxt = cur.next;
            cur.next = prev;
            //System.out.println("cur.next:" + cur.next);
            prev = cur;
            //System.out.println("prev:" + prev);
            cur = nxt;
        }
        //head.next = tail;
        return prev;
    }

    public static void main(String[] args) {
        ListNode l1 = new ListNode(1);   
        l1.next = new ListNode(2);  
        l1.next.next = new ListNode(3);  
        l1.next.next.next = new ListNode(4);
        l1.next.next.next.next= new ListNode(5);

        System.out.println(reverseKGroup(l1, 3));
    }
}

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }

    public String toString(){
        String retVal = "";
        ListNode n = this;
        while(n!=null){
            retVal += n.val +" ";
            n = n.next;
        }
        return retVal;
    }
}

当您启动调试器并尝试调试prev的值时,该过程将被挂起。