假设我有一个应用程序,如果需要执行任务可以生成多个线程......所以没什么特别的。我使用Eclipse编写和调试Java应用程序。一个线程(让我们称之为“异步任务”)在离开run()方法后立即重新生成(所以有bug并且我想找到这种行为的原因)。
我的问题是,如果我使用eclipse IDE(调试透视图...)暂停此线程“异步任务”,是否有办法找出最初启动此线程的位置(例如使用Debug视图或其他任何方式)?因为我想知道是谁产生了这个帖子(没有进行文本搜索或类似的事情)。
有获得此信息的好方法吗?
答案 0 :(得分:6)
我会在Thread.start()
设置断点并启用条件
每当启动名为“async task”的线程时,条件将被计算为true,并且调用start方法的线程将被暂停。然后你可以在堆栈跟踪中看到来电的来源。
答案 1 :(得分:2)
在生产中遇到了类似的问题,并编写了一个java代理,用于记录每个线程启动的堆栈。这样,系统可以运行,您可以在日志中实时获取信息。当您有多个线程时,这很有用。 https://github.com/xdev-software/thread-origin-agent
答案 2 :(得分:0)
由于thread
debuger
将挂起您的整个debug
,因此您无法使用JVM
检查是否有新logs
启动。
您可以放置一些threads
并查看{{1}}在那里的工作方式。