5

在调试 java 多线程程序时,我设置了断点。在 start 方法调用控件后,menthod 将不会运行,请告诉我调试过程。

示例代码

class Test extends Thread { 
    public static void main(String[] args) { 
        try { 
            Thread t = new Thread(new Test());
            t.start(); 
            t.start(); 
        } catch (Exception e) { 
             System.out.print("e "); 
        } 
    } 

    public void run() { 
        for(int i = 0; i < 2; i++) 
            System.out.print(Thread.currentThread().getName() + " "); 
    }
}
4

1 回答 1

8

调试器从主线程开始,因为您的断点在主线程中。
t.start()产生一个新线程。
但是调试器将继续使用主线程本身。

如果要调试新创建的线程,则还必须在run()方法中设置断点。然后调试器控件转到新创建的线程,但对用户是不可见的。

如果您想查看run()新创建线程的方法中的控件,则必须按照以下步骤操作 -

  1. 将断点与run()方法一起放置在main()方法中。
  2. 开始调试程序,直到您遇到语句t.start()
  3. 完成后t.start(),进入“调试”视图。在那里您会发现 2 个线程正在运行。(您可以通过转到“窗口 -> 显示视图 -> 调试”在 eclipse 中找到“调试”视图)。
    • 第一个是主线程
    • 第二个是新创建的线程(例如 [Thread-1] )
  4. 单击第二个线程以查看运行方法中的控件。
  5. 线程执行完成后,再次进入“调试”视图,点击主线程继续主线程调试。

注意:如果您在线程结束的第 3 步之后继续使用主线程,那么您将无法调试新线程。

于 2013-09-18T14:12:38.593 回答