Как фильтровать стек вызовов в представлении отладки Eclipse для Java

Во время отладки в представлении Debug в 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

Единственный способ, с помощью которого я могу фильтровать представление трассировки стека, - через Mylyn. Если у вас есть активная задача Mylyn, и вы нажмете кнопку "Фокус на активную задачу (экспериментальный)" в окне "Отладка", тогда трассировка стека будет отфильтрована только для отображения тех методов, которые находятся в текущем контексте задачи.

В этом случае вы не будете фильтровать определенные элементы из трассировки стека; скорее всего, все будет отсутствовать по умолчанию, и будут отображаться только определенные элементы (в контексте задачи).

Вы можете посмотреть этот ответ для получения дополнительной информации о Mylyn.

Ответ 2

Подготовка: Вы можете использовать фильтры шага, как описано здесь. Затем всякий раз, когда вы выполняете отладку через свой код, он не переходит в исключенные пакеты или классы, например. из JDK или некоторых фреймворков, таких как Hibernate или Spring. Но это только предпосылка.

Решение: В стеке все еще есть фреймы из этих пакетов. Чтобы отфильтровать их, вам необходимо исправить плагин Eclipse JDT Debug UI. Кто-то еще уже сделал это для более старых выпусков Eclipse до Indigo. Поскольку мне было любопытно, могу ли я запустить его в текущем выпуске Luna 4.4.1, я воссоздал другие изменения парня и нажал кнопку Debug View + Stack Filter Plug- В для GitHub, включая ссылку для загрузки исправленного плагина. Так что, если вы тоже на 4.4.1, вам повезло, и вам не нужно патч и компилировать что-либо самостоятельно. Просто используйте мою версию. В противном случае, пожалуйста, клонируйте мое репо и посмотрите на изменения, а затем примените их к версии плагина по вашему выбору.