1

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

有什么方法可以让 Eclipse 将 Thread.start 调用显示为Thread.run()方法的父级。也许一个插件可以做到这一点?

4

3 回答 3

0

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

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

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

  • 标准做法是将 Runnable 作为构造函数参数传递给 Thread。通常情况下,Runnable 被预先构建的线程(例如 Executors、asynchExec)调用。在这种情况下,您感兴趣的是构造函数的调用者。
  • 可以通过其构造函数追溯非匿名 Runnables(在该 ctor 上调用层次结构将是一个好方法)
  • 方法的覆盖Thread.run()可能会做到这一点,但是您对Thread.start()方法的调用者更感兴趣
  • 调用层次结构视图(AFAIK)不是很可扩展(但是,实施者曾经这样做,但在集成到核心 JDT 之前,是由与原始调用层次结构相同的人编写的)。
于 2009-01-23T00:43:43.633 回答
0

有趣的问题。

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

于 2009-01-23T06:39:16.910 回答
0

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

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

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

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

我还尝试了 nWire。它有很多我没有时间充分探索的功能,但我找不到一种方法来做我正在寻找的东西。

于 2009-01-28T10:17:33.103 回答