如何在 Eclipse 调试视图中为 Java 筛选调用堆栈

2022-09-01 04:41:20

调试时,Eclipse 中的“调试”视图显示调用堆栈。这很棒。但我希望能够过滤掉所有我绝对不关心的电话,比如Spring和JUnit跑步者。

下面是我现在的调用堆栈的一个示例。我想以粗体显示条目,同时隐藏其余所有内容。有可能以任何方式做吗?(插件,下一个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

答案 1

制备:您可以按此处所述使用步骤筛选器。然后,每当您逐步调试代码时,它都不会跳转到排除的包或类中,例如从JDK或某些框架(如Hibernate或Spring)中跳转。但这只是一个先决条件。

溶液:堆栈跟踪仍包含这些包中的帧。为了过滤掉它们,你需要修补Eclipse JDT Debug UI插件。其他人已经为旧的Eclipse版本做了这件事,直到Indigo。因为我很好奇我是否可以在当前版本的Luna 4.4.1中运行它,所以我重新创建了其他人的更改,并将调试视图+堆栈过滤器插件推送到GitHub,包括一个指向修补插件的下载链接。因此,如果您也在4.4.1上,那么您很幸运,不需要自己修补和编译任何内容。只需使用我的版本。否则,请克隆我的存储库并查看更改,然后将其应用于您选择的插件版本。


答案 2

据我所知,筛选堆栈跟踪视图的唯一方法是通过 Mylyn。如果您有一个活动的 Mylyn 任务,并且您单击“调试视图”中的“关注活动任务(实验性)”按钮,则堆栈跟踪将被筛选为仅显示当前任务上下文中的那些方法。

在这种情况下,您不会从堆栈跟踪中筛选某些项目;相反,默认情况下,所有内容都将被输出,并且仅显示某些项目(任务上下文中的项目)。

你可以看看这个答案,了解更多关于Mylyn的信息。