我正在调试一些代码。我的调试器显示代码的来源来自Thread.run()。我需要知道调用Thread.start()代码的哪一部分!有没有办法找到它?
答案 0 :(得分:7)
您可以使用new Throwable().getStackTrace()
获取完整的堆栈跟踪。要获得start
堆栈,您必须扩展Thread
,这是实际需要执行此操作的少数几次之一(最好使用Runnable
)。
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 :(得分:0)
我发现了使用Eclipse或任何其他IDE的粗略有效的技术。假设你的Runnable或Callable中有一个断点,并且线程在那里暂停...没有双人能够立即知道从哪里开始调用... 但是,只需右键单击Runnable / Callable构造函数,然后点击显示调用层次结构' ..它就是!!你会知道Runnable / Callable的构建地点......然后就开始调用它! 在Eclipse中,如果Runnable / Callable没有no-arg构造函数,请右键单击类名并选择“显示调用层次结构' ...问题解决了......这是多么轻松。”