繁体   English   中英

在run方法中,如何查找从哪里开始调用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM