class C extends Thread {
StackTraceElement[] constructed;
StackTraceElement[] started;
public C() {
constructed = new Throwable().getStackTrace();
}
@Override
public void run() {
// Your suuff.
}
@Override
public synchronized void start() {
started = new Throwable().getStackTrace();
super.start();
}
}
# 1 楼答案
可以使用
new Throwable().getStackTrace()
获取完整的堆栈跟踪。要获得start
堆栈,您必须扩展Thread
,这实际上是为数不多的几次扩展之一(最好使用Runnable
)# 2 楼答案
我发现了一种使用Eclipse或任何其他IDE的粗糙而有效的技术。假设在Runnable或Callable中有一个断点,线程在那里暂停。。。没有人不知道start是从哪里来的 但,只需右键单击Runnable/Callable构造函数,然后单击“显示调用层次结构”。。就这样!!您将了解Runnable/Callable的构造位置。。然后就开始了
在Eclipse中,如果Runnable/Callable没有参数构造函数,右键单击类名并选择“显示调用层次结构”。。问题解决了。。真是松了一口气