假设我有一个包含数百种方法的大程序。并且根据输入的性质,程序流程正在发生变化。
想想我想改变原始流程。找到调用层次结构/引用并理解流程是一件很麻烦的事。
我是否在Eclipse中有任何解决方案?还是一个插件?作为一个例子,我只需要一个按时间顺序记录的方法名称。然后我不需要担心与我的“给定输入”
无关的方法更新:在eclipse中使用调试模式或添加打印消息是不可行的。该计划太棒了。 :)
答案 0 :(得分:5)
您可以使用 AspectJ 记录所有名为的方法的名称,而无需更改原始程序。
例如,请参阅 tracing 。
aspect SimpleTracing {
pointcut tracedCall():
call(void FigureElement.draw(GraphicsContext));
before(): tracedCall() {
System.out.println("Entering: " + thisJoinPoint);
}
}
答案 1 :(得分:1)
如果你只想知道调用哪些方法,而不是精确的顺序,你可以考虑使用测试覆盖率工具。这些工具用于检测源代码,以不同的粒度收集“已执行”事实(仅限方法调用,和/或由条件控制的每个代码块)。
SD Test Coverage Tool是一个可以执行此操作的工具。
它不会收集呼叫图甚至是呼叫的顺序。
如果您想要更多地控制仪器,可以考虑使用DMS Software Reengineering Toolkit。 DMS将以自定义源到源program transformation重写规则控制的任意方式解析,转换和重新打印Java。将日志记录转换插入到每个方法的开始和退出中会很容易(事实上,这几乎就是SD测试覆盖工具的工作原理)。给定原始的enter-X和exit-X数据,构造运行时调用树是一项简单的任务。