如何查找最初启动线程的位置

时间:2013-12-02 10:06:02

标签: java eclipse multithreading debugging

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

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

有获得此信息的好方法吗?

3 个答案:

答案 0 :(得分:6)

我会在Thread.start()设置断点并启用条件

enter image description here

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

答案 1 :(得分:2)

在生产中遇到了类似的问题,并编写了一个java代理,用于记录每个线程启动的堆栈。这样,系统可以运行,您可以在日志中实时获取信息。当您有多个线程时,这很有用。 https://github.com/xdev-software/thread-origin-agent

答案 2 :(得分:0)

由于thread debuger将挂起您的整个debug,因此您无法使用JVM检查是否有新logs启动。

您可以放置​​一些threads并查看{{1}}在那里的工作方式。