如何在Eclipse的Eclipse调试视图中过滤调用堆栈

时间:2010-10-21 14:26:42

标签: java eclipse debugging callstack

在调试时,Eclipse中的Debug视图显示调用堆栈。哪个好。但是我希望能够过滤掉我绝对不关心的所有调用,例如Spring和JUnit runner。

这是我现在调用堆栈的一个示例。我想把这些条目保持为粗体,同时隐藏所有其他条目。有可能以任何方式吗? (插件,下一个Eclipse发布,配置,......)

com.myproject.mymodule.MyFinderObject.fetchDestinationSettings
com.myproject.mymodule.MyFinderObject.compareCurrentSettings
com.myproject.mymodule.MyFinderObject.compareSettings
sun.reflect.NativeMethodAccessorImpl.invoke0
sun.reflect.NativeMethodAccessorImpl.invoke
sun.reflect.DelegatingMethodAccessorImpl.invoke
java.lang.reflect.Method.invoke
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
com.myproject.caching.CachingInterceptor.invoke
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
org.springframework.aop.framework.JdkDynamicAopProxy.invoke
$Proxy43.doSthWith
com.myproject.mymodule.MyFinderObjectTest.testSettingComparisonForCurrentSettings
sun.reflect.NativeMethodAccessorImpl.invoke0
sun.reflect.NativeMethodAccessorImpl.invoke
sun.reflect.DelegatingMethodAccessorImpl.invoke
java.lang.reflect.Method.invoke
com.myproject.mymodule.MyFinderObjectTest
com.myproject.mymodule.MyFinderObjectTest
com.myproject.mymodule.MyFinderObjectTest
junit.framework.TestResult$1.protect
junit.framework.TestResult.runProtected
junit.framework.TestResult.run
com.myproject.mymodule.MyFinderObjectTest
junit.framework.TestSuite.runTest
junit.framework.TestSuite.run
org.junit.internal.runners.JUnit38ClassRunner.run
org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference
org.eclipse.jdt.internal.junit.runner.TestExecution.run
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main

2 个答案:

答案 0 :(得分:12)

准备工作:您可以按step filters所述使用here。然后,无论何时对代码进行步骤调试,它都不会跳转到排除的包或类中,例如来自JDK或一些框架,如Hibernate或Spring。但这只是一个先决条件。

解决方案:堆栈跟踪仍包含来自这些包的帧。为了过滤掉这些,您需要修补 Eclipse JDT Debug UI 插件。 Someone else已经完成了旧版Eclipse发布到Indigo的工作。因为我很好奇我是否可以在当前版本的Luna 4.4.1中运行它,我重新创建了另一个人的更改并推送了 Debug View + Stack Filter Plug-In < / strong>到GitHub,包括修补插件的下载链接。因此,如果您也使用4.4.1,那么您很幸运,不需要自己修补和编译任何内容。只需使用我的版本。否则请克隆我的仓库并查看更改,然后将它们应用到您选择的插件版本。

答案 1 :(得分:9)

我知道过滤堆栈跟踪视图的唯一方法是通过Mylyn。如果您有一个活动的Mylyn任务,并且单击Debug View中的“Focus on Active Task(experimental)”按钮,那么堆栈跟踪将被过滤以仅显示当前任务上下文中的那些方法。

在这种情况下,您不会从堆栈跟踪中过滤某些项目;相反,默认情况下一切都会被淘汰,只显示某些项目(在任务上下文中)。

您可以查看this答案,了解有关Mylyn的更多信息。