2010-10-21 3 views
34

Во время отладки в представлении Debug в Eclipse отображается стек вызовов. Это здорово. Но мне бы хотелось, чтобы я смог отфильтровать весь вызов, который мне определенно не нужен, например Spring и JUnit runner.Как фильтровать стек вызовов в представлении отладки Eclipse для Java

Вот пример моего стека вызовов прямо сейчас. Я бы хотел, чтобы записи были выделены жирным шрифтом, а все остальное скрывали. Можно ли это сделать? (Плагин, следующий релиз 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

И, кстати, как вы думаете, это могло бы сделать разумный запрос функции? – espinchi

+0

Несомненно - это тоже звучит не так. Переход к API отладки. – Ladlestein

+0

@espinchi, я использую эту функцию в IntelliJ, и это очень помогает. – DerMike

ответ

8

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

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

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

+0

Спасибо за информацию. Это было бы слишком ограничительным для моего дела. Тем не менее, если никто не предложит ничего лучшего, я отмечу это как принятый ответ. – espinchi

+0

Вы можете создать задачу и добавить весь свой код в контекст, и там у вас есть то, что вы хотите. Я даже не пробовал. Единственная проблема, о которой я могу думать, - это Mylyn, которая может попытаться удалить из контекста не затронутые темы. – TWiStErRob

11

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

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

+0

Sweet! Спасибо за помощь! –

+0

привет, я постарался поместить org.eclipse.jdt.debug.ui_3.6.300.201412061413.jar в папку dropin eclipse, но ничего не происходит ... любая идея? спасибо – nzaero

+0

Не знаю. Используете ли вы точно Luna 4.4.1 или другую версию Eclipse? И какая версия debug.ui в настоящее время установлена ​​перед тем, как отказаться от замены? – kriegaex

 Смежные вопросы

  • Нет связанных вопросов^_^