Eclipse调试获得完整堆栈

时间:2013-12-01 18:02:07

标签: java eclipse debugging

我只是有一个简单的问题,请考虑以下方法

public void do_something(long arg){
//some work
}

并且在eclipse中,我为上面的方法添加了一个断点并运行程序,一切都很好,但我找不到当前堆栈的堆栈?!例如

call do_something
push id
call previous_method
call xyz
pop z
call useZ
push z

我的意思是这个方法是由10种不同的方法和不同的堆栈调用的,我怎么能用eclipse找出完整的线程堆栈(包括方法)?我应该更改一些默认属性还是什么?!

2 个答案:

答案 0 :(得分:2)

要放置图像,我会重复我的评论作为答案。

在Debug视图中,您可以找到调用堆栈,在Variables View中可以找到局部变量的实际参数和值:

Call Stack for a single threaded application

要获取调用堆栈中其他方法的局部变量的实际参数和值,只需在当前方法上方的方法上单击Debug View。

这不适用于多线程应用程序。您只能看到当前运行该方法的线程的调用堆栈。看着: Call Stack for a multi threaded application

在方法foo中,通过创建计时器来创建线程。如果jvm在bar暂停,则只能看到TimerTask.run - >的调用堆栈bar但不是main - > foo - > run - > bar

答案 1 :(得分:1)

您所描述的不是筹码。

这是一段历史。

Eclipse并非旨在为您提供历史记录。但是,还有其他工具可以显示历史记录,例如Chronon。但是,这对你来说可能太贵了!如果您的应用程序非常复杂,它也可能会使用太多内存。

获取历史记录的最简单方法是将System.out.println("some message")放在很多地方。

在任何地方使用System.out.println可能不方便,因此已经开发了其他一些想法来改进:

  1. 日志框架处理常见任务,例如打印发生事件的时间,旋转大日志文件等。
  2. 面向方面编程允许您同时在许多地方注入日志。