Eclipse – 显示完整的调用堆栈(比如它在调试器中遇到断点)而没有放入断点?

我正在使用一个对我来说不熟悉的遗留Java应用程序,因此有一种方法可以弄清楚它是如何工作的,并且更容易找到事情,我认为可以在执行操作后获得完整的堆栈跟踪,从而能够根据特定的UI动作查看正在使用的类。 我以为这在调试器中是可能的,但它似乎只有在我插入一个断点时才有效,在这种情况下,部分目的是为了让我不必知道被调用的是什么才能插入断点第一(因为这有助于告诉我)。

如果这是一个基本问题我道歉,我已经搜索了这个,但我找不到正确的答案。

这并不直接回答您的问题,但可能会更好地解决您的问题。 看看BTrace 。 它允许您检测正在运行的Java应用程序并插入自己的一些基本代码。 例如,您可以编写完整的方法调用链来帮助您找到通过应用程序的方式。 它有点类似于AspectJ,但具有完全不同的目的,并且不需要更改项目源:

“BTrace是一种安全,动态的Java跟踪工具.BTrace通过动态(字节码)检测正在运行的Java程序的类来工作.BTrace将跟踪操作插入到正在运行的Java程序的类中,并热交换跟踪的程序类。”

当您处于调试器透视图中时,您将看到一个显示已启动进程的视图。 在该视图中,您可以告诉它暂停进程的所有线程。 一旦停止,您将能够浏览线程以查看它们正在做什么。 要尝试捕获特定操作正在执行的操作,您必须启动操作,然后快速暂停所有线程。

您始终可以使用VM arg -verbose:class运行应用程序。 然后,您可以观察控制台输出,并在执行特定操作时查看VM正在加载的类。 这可能会为您提供断点位置的起点。 根据情况,这并不总是有效,但可能会有所帮助。

您可以使用的另一个技巧是计算您知道哪些类必须涉及您尝试捕获的代码路径。 例如,您提到它是一个Java EE Web应用程序,因此该操作可能是某种类型的servlet交互(在某种程度上)。 我没有在我面前的API,但您可以在响应对象中检索输出流的方法上放置一个断点。 一旦中断,您将知道尝试为请求提供服务的代码。

一些建议:

一些分析器将允许您从任何特定方法(有时向下)走,以查看正在调用和被调用的内容。 我发现这个令人惊讶的流量信息,即使在我认为我熟悉的应用程序中也是如此。

为了理解主线流程,我认为没有更好的替代方式与调试器交互工作。 它会引导你学习其他重要的东西。 我知道,这不是你想听到的。 这假设您可以在错过关键出站时快速重启应用程序。

反向设计大型遗留应用程序是我经常使用UML的地方。 在我的脑海中留下太多的东西来形成一幅好的大局。 如果您有一个可以进行逆向工程的UML工具,请使用该应用程序加载它,然后可能会严重删除您不关心的类,因为它们很简单或显而易见。 以有助于您理解的方式排列图表。 我以这种方式使用了Together,Magic Draw和Visual Paradigm。 一起工作最好 – 但是十年前。

通过单击eclipse中的“打开调用层次结构”(左键单击所选方法或CTRL + ALT + H),您始终可以看到调用方法的位置。 此外,您始终可以通过单击“打开声明”(左键单击所选方法/类或F3)来检查方法/类的定义位置。