Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找到线程最初的起始位置_Java_Eclipse_Multithreading_Debugging - Fatal编程技术网

Java 如何找到线程最初的起始位置

Java 如何找到线程最初的起始位置,java,eclipse,multithreading,debugging,Java,Eclipse,Multithreading,Debugging,假设我有一个应用程序,如果需要执行任务,它可以生成多个线程。。。所以没什么特别的。我使用Eclipse编写和调试Java应用程序。一个线程(让我们称之为“异步任务”)在离开run()方法后会立即重新启动(因此存在bug,我想找出这种行为的原因) 我的问题是,如果我使用EclipseIDE(调试透视图…)暂停此线程“异步任务”,是否有办法找到此线程最初启动的位置(例如使用调试视图或任何其他视图)?因为我想知道是谁产生了这个线程(不进行文本搜索或类似的事情) 有什么好方法可以获取此信息吗?您不能使用

假设我有一个应用程序,如果需要执行任务,它可以生成多个线程。。。所以没什么特别的。我使用Eclipse编写和调试Java应用程序。一个线程(让我们称之为“异步任务”)在离开run()方法后会立即重新启动(因此存在bug,我想找出这种行为的原因)

我的问题是,如果我使用EclipseIDE(调试透视图…)暂停此线程“异步任务”,是否有办法找到此线程最初启动的位置(例如使用调试视图或任何其他视图)?因为我想知道是谁产生了这个线程(不进行文本搜索或类似的事情)


有什么好方法可以获取此信息吗?

您不能使用
调试程序来检查新
线程是否启动,因为
调试
将挂起整个
JVM


您可以放置一些
日志
并检查
线程
在那里的工作方式。

我会在
线程.start()设置断点并启用一个条件


每当一个名为“async task”的线程启动时,该条件将被计算为true,并且调用start方法的线程将暂停。然后你可以在stacktrace中看到电话的来源

在生产中遇到了类似的问题,并编写了一个小java代理来记录每个线程启动的堆栈。因此,系统可以运行,您可以在日志中实时获取信息。当你有很多线程时,这会有很大帮助

问题是有几个.start()调用,因为它是一个大型应用程序,这就是我不想对所有start()方法进行文本搜索的原因?这可以做到@frecherxdach,但只有当名称等于
异步任务时,断点才会中断。当然,如果有许多名为async tasks的线程,那么所有线程都将中断,您必须分析所有线程。@FrecherxDachs是的,这就是我的意思。将断点放在Thread类的start方法中。太棒了!!!!!!