如何在java中调试Thread.start()

xghobddn  于 2023-02-18  发布在  Java
关注(0)|答案(2)|浏览(122)

我正在NetBeans IDE 8.0.2中调试一个Java应用程序。
Thread.start()方法被调用时,我无法到达那个线程的run()方法(尽管我在那个方法中放置了断点)。然而,有时它会命中该方法,有时则不会。
如何在调试时访问run()方法?

public class JavaApplication7 {

    public static void main(String[] args) {
        Mailthread1 mt1 = new Mailthread1();
        Thread pt = new Thread(mt1);
        pt.setName("Mailthread");
        pt.start();
    }
}

Thread类是:

class Mailthread1 implements Runnable {
    public void run() {
        System.out.println("Cant hit this line");
    }
}
hwamh0ep

hwamh0ep1#

在JDWP中,有3种类型的断点:类、方法和行。
如果IDE无法拦截println()中的行断点,则可以尝试run()重新声明中的方法断点。
如果失败了,字节码和源代码之间就有不同步的地方,你可以试着添加行,在上面和下面再断点一行。
除此之外,改变IDE和/或改变JVM。这应该会起作用。

jmo0nnb3

jmo0nnb32#

在代码的main分支中没有t.join()或sleep,因此理论上新线程会启动,但main方法也会继续运行并退出,应用程序甚至在其他线程中执行操作之前就终止了,断点也无法到达。

相关问题