这是我的情况:
所以我的问题是,有没有办法,让一个线程在断点处停止(intelliJ,但我也可以使用eclipse)来找出它的起始位置?
感谢
答案 0 :(得分:1)
也许你可以将断点放入Thread.start()
。
为了避免多次调用断点,也许将断点与条件逻辑放在一起是有意义的,例如检查全局布尔标志。例如,您怀疑,您的代码在某个事件发生之前调用,当事件发生时,将global标志设置为true。
答案 1 :(得分:0)
打破对象中的代码会告诉您它是哪个线程,并且其调用堆栈可以告诉您应该查找哪个Runnable
。我假设你已经到了这么远,并且找到所有对这个Thread / Runnable的引用是不够的。在这种情况下,您可以为java.lang.Thread
编写一个包装类,在run()
中执行instanceof / type检查并在那里设置断点
答案 2 :(得分:0)
没有
如果没有一些蛮力的努力,我认为没有办法解决这个问题。
我将追溯到已启动的Runnable(通过堆栈跟踪),然后获取该类的继承和接口层次结构,然后在所有这些类上查找run()和start()方法。除非有人刚刚继承了遗产,否则不应该花那么长时间。
答案 3 :(得分:0)
我认为首先你必须得到运行的Runnable
。这很简单,因为它始终是堆栈跟踪的第一行。 (当然,您需要具体的类而不是定义run方法的类。)一旦有了类,就很容易找到实例化。然后,应该简单地遵循线程启动的点。我错过了什么吗?