研究Java项目中的资源上下文

时间:2012-03-11 15:55:39

标签: java eclipse java-ee stack-trace callstack

当我研究复杂的Java代码时,我没有写,我经常在记事本中写下我觉得对于给定问题感兴趣的一些资源的调用堆栈。这些资源通常是方法或常量。

以下是一个例子:

CONSTANT_NAME
    com.company.common.context.business.Context.methodName1()
        com.company.domain.web.controller.subdomain1.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain2.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain3.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
    com.company.common.context.business.Context.methodName2()
        com.company.domain.web.controller.subdomain1.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain3.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
        com.company.domain.web.controller.subdomain2.BusinessController.handleRequest(HttpServletRequest, HttpServletResponse)
    com.company.common.context.business.Context.methodName3(Long, boolean)
        com.company.domain.web.controller.services.ClassName.onSubmit(HttpServletRequest, HttpServletResponse, Object, BindException)

为此,我在Eclipse上右键单击常量/方法并选择“引用”,“工作区”(快捷键CTRL + Shift + G)。在“搜索”选项卡中,我右键单击结果并选择“复制限定名称”。然后我使用合适的制表将其复制到记事本中(第一个变量/方法没有制表,每个调用级别有一个额外的制表)。如果通过2个代码调用方法,则为2个调用方法的完全限定名称添加相同的列表。 结果看起来有点像java stacktraces。

为什么我这样做?因为我认为它提供了大量关于某些资源的信息,并且可以知道它们在哪个执行上下文中使用。当然,这不适用于配置资源(例如xml配置文件)。

对于大型程序,这种操作会变得很麻烦。

如果我在Eclipse中使用调试模式,当遇到断点时,我可以获得一个有趣的堆栈跟踪,但这仅适用于单个案例,我在学习代码时需要更多“抽象”。

你知道某些工具能为我做那种工作吗?

谢谢!

  

编辑:我发现这样做的最好方法是:

     
      
  1. 在常量/方法/变量上创建“打开调用层次结构”。
  2.   
  3. 使用“调用层次结构”视图中的键盘箭头展开所有项目
  4.   
  5. 右键单击根项目,然后选择“复制扩展层次结构”。
  6.         

    然后你可以在记事本中学习调用栈

2 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了你的问题,但是没有“打开调用层次结构”(Ctrl + Alt + H)做你想做的事情?

答案 1 :(得分:1)

  

如果我在Eclipse中使用调试模式,我可以获得一个有趣的堆栈跟踪   当一个断点被击中但这只是一个案例,我想要   当我学习代码时,更多的“抽象”。

     

你知道某些工具能为我做那种工作吗?

不确定我是否得到了你所要求的内容,但是为了研究代码的特定部分,调试器将是最好的方法,因为你可以完全按照每个用例的代码的各个部分进行操作。
对于更通用的内容,我建议使用uml插件并自动创建各种类和关系图
这可以帮助你在学习一个大项目(由他人制作)时获得一个提醒,而不仅仅是在一张纸上画画。例如。 EUML2非常好,有免费版