2010-10-21 8 views
34

Durante la depuración, la vista Depurar en Eclipse muestra la pila de llamadas. Lo cual es genial. Pero me encantaría poder filtrar todas las llamadas que definitivamente no me importan, como Spring y el corredor JUnit.Cómo filtrar la pila de llamadas en la vista de depuración Eclipse para Java

Aquí hay un ejemplo de mi pila de llamadas en este momento. Me gustaría mantener las entradas en negrita, ocultando todo el resto. ¿Es posible hacer de alguna manera? (Plug-in, la próxima versión de Eclipse, configuración, ...)

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

Y, por cierto, ¿cree que esto sería una solicitud sensata? – espinchi

+0

Claro, tampoco suena tan difícil. Vamos a hurgar en las API de depuración. – Ladlestein

+0

@espinchi, uso esta característica en IntelliJ y me ayuda mucho. – DerMike

Respuesta

8

La única manera que conozco para filtrar la vista de seguimiento de la pila es a través de Mylyn. Si tiene una tarea de Mylyn activa y hace clic en el botón "Centrarse en la tarea activa (experimental)" en la Vista de depuración, el filtrado de la pila se filtrará para mostrar solo los métodos que están en el contexto de la tarea actual.

En este caso, no estaría filtrando ciertos elementos del seguimiento de la pila; más bien, todo saldría por defecto, y solo se mostrarían ciertos elementos (aquellos en el contexto de la tarea).

Puede encontrar this más información sobre Mylyn.

+0

Gracias por la información. Esto sería ciertamente demasiado restrictivo para mi caso. Aún así, si nadie propone algo mejor, marcaré esto como la respuesta aceptada. – espinchi

+0

Puede crear una tarea y agregar todo su código al contexto, y allí tiene lo que desea. No lo intenté sin embargo. El único problema que se me ocurre es que Mylyn puede tratar de eliminar elementos largos no tocados del contexto. – TWiStErRob

11

Preparación: Puede usar step filters como se describe here. Luego, cada vez que realice una depuración de paso a través de su código, no saltará a paquetes o clases excluidos, p. desde el JDK o algunos frameworks como Hibernate o Spring. Pero esto es solo un prerrequisito.

Solución: La pila todavía contiene marcos de esos paquetes. Para filtrarlos también, debe aplicar un parche al plugin Eclipse JDT Debug UI. Someone else ya lo hizo para versiones anteriores de Eclipse hasta Indigo. Debido a que tenía curiosidad si podía hacerlo funcionar en el lanzamiento actual de Luna 4.4.1, recreé los cambios del otro tipo e introduje el Debug View + Stack Filter Plug-In en GitHub, incluyendo un enlace de descarga al parche. Entonces, si también estás en 4.4.1, tienes suerte y no necesitas parchar y compilar nada por ti mismo. Solo usa mi versión. De lo contrario, clone mi repositorio y observe los cambios, luego aplíquelos a la versión del complemento que elija.

+0

¡Dulce! ¡Gracias por la ayuda! –

+0

hola, he intentado poner org.eclipse.jdt.debug.ui_3.6.300.201412061413.jar en la carpeta dropin de eclipse pero nada parece pasar ... alguna idea? gracias – nzaero

+0

No tengo idea. ¿Utiliza exactamente Luna 4.4.1 u otra versión de Eclipse? ¿Y qué versión de debug.ui está instalada actualmente antes de colocar el reemplazo? – kriegaex

Cuestiones relacionadas