[英]In run method, how to find from where start was called?
我正在调试一些代码。 我的调试器显示代码的来源来自Thread.run()。 我需要知道调用Thread.start()代码的哪一部分! 有没有办法找到这个?
您可以使用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();
}
}
我发现了使用Eclipse或任何其他IDE的粗略而有效的技术。 , just right click Runnable/Callable constructor and click 'show call hierarchy'.. that's it!! 假设您的Runnable或Callable中有一个断点,并且线程在那里暂停...没有双重的人无法确定何时立即调用start ... ,只需右键单击Runnable / Callable构造函数并单击'show call等级'..就是这样!! 你会知道Runnable / Callable的构建地点......然后就开始调用它!
在Eclipse中,如果Runnable / Callable没有no-arg构造函数,右键单击类名并选择“显示调用层次结构”。问题解决了..这是一种解脱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.