在Eclipse中调用Thread.run()的层次结构

时间:2009-01-22 23:40:57

标签: java eclipse multithreading eclipse-plugin

我倾向于使用eclipse的“Open Call Hierarchy”函数来跟踪大型Java项目中方法调用的位置。我对Threads感到恼火,因为调用层次结构将Thread.run()方法的调用者显示为各种内部Java线程函数,而不是有效导致线程运行的Thread.start()调用。

有没有办法让Eclipse将Thread.start调用显示为Thread.run()方法的父级。也许这是一个插件吗?

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题:你想找到给定Thread.start()方法的Runnable.run()方法的来电者吗?

我发现这对于非常小的,短期运行的匿名Runnables非常有用。

然而,在更一般的情况下,我不确定进一步的实用性:

  • 标准做法是将Runnable作为构造函数参数传递给Thread。通常情况是Runnable由预先构造的线程调用(例如Executors,asynchExec)。在这种情况下,它是您感兴趣的构造函数的调用者。
  • 非匿名Runnables可能会通过其构造函数追溯(该ctor上的调用层次结构将是一个很好的方法)
  • 覆盖Thread.run()方法可能会这样做,但您对Thread.start()方法的来电者更感兴趣
  • 调用层次结构视图(AFAIK)不是非常可扩展的(但是,Implementors用于执行此操作,但是在将其集成到核心JDT之前由与原始调用层次结构相同的人编写。 / LI>

答案 1 :(得分:0)

有趣的问题。

欢迎您查看nWire。它是一种在一个动态视图中探索代码的所有关联的新工具。使用非常方便和简单。它将调用者和实现者(以及所有其他关联)组合在一起。很想得到你的反馈。

答案 2 :(得分:0)

感谢您回复Jamesh。 根据你提出的前两点,你说(在匿名和非匿名的Runnables中)看看Runnable的构造函数的调用层次结构是有用的 - 是的,我同意!这通常是我最终要做的事情。但它通常意味着在两个层次结构之间频繁切换,一次只能显示其中一个层次结构。我想通过保留一个层次结构来避免这种情况。

Runnable构造函数和对run()的调用之间没有直接的调用层次结构,所以在我看来,通过将构造函数添加为run()的“调用者”来扩展调用层次结构是不合适的。但是,调用start()或将线程添加到执行程序(或执行程序中的run()调用)可能适合在调用层次结构中显示。

我真的只是想知道是否存在我无法找到的现有解决方案。我想如果我想要它,我只需要自己尝试一个插件。

我尝试了实现者插件。它很有用,但不适用于这个特殊问题!

我也试过了nWire。它有很多我没有时间去探索的功能,但我找不到办法去做我想要的东西。