Herausforderung#

Die Stack-Traces im Debug-View werden immer länger. Zwischen dem nützlichen Code befinden sich fremde Klassen, die für die momentane Entwicklung unnötig sind. Durch die Möglichkeit zur Laufzeitgenerierung von Bytecode kommen störende Interceptor-Aufrufe hinzu. Die nützliche Information, meist der eigene Code, wird mühsam zwischen den Zeilen gesucht. Eclipse bietet zwar die Möglichkeit zum Step-Filtering, also zum Überspringen von uninteressantem Code beim Stepping. Der Stack-Trace zeigt jedoch nach wie vor die uninteressanten Stack-Frames an. Die Übersichtlichkeit, sowie die Möglichkeit durch Mausklicks im Stack-Trace zu navigieren ist dadurch erheblich eingeschränkt.

Lösung#

Die Intersult hat das Debug-Filter-Plugin entwickelt. Dies filtert nun auch den Stack-Trace im Debug-View mittels der eingestellten Filter. Die Preferences sind über die Preferences (Step Filter) oder durch das Kontextmenü im Stacktrace erreichbar. Die Filterung wird ein- und ausgeschaltet mit dem Knopf für das Step-Filtering.

Beispiel#

Der folgende Code zeigt eine Klasse, die das Interface Comparable implementiert, sowie eine Methode main um eine Sortierung von Instanzen dieser Klassen vorzunehmen:
public class StackTest {
	public static class Sub implements Comparable<Sub> {
		private String string;

		public Sub(String string) {
			super();
			this.string = string;
		}

		public String getString() {
			return string;
		}
		public void setString(String string) {
			this.string = string;
		}

		@Override
		public int compareTo(Sub sub) {
			return string.compareTo(sub.string);
		}
	}
	
	public static void main(String[] args) {
		Object[] objects = new Sub[] {
			new Sub("Eins"),
			new Sub("Zwei")
		};
		Arrays.sort(objects);
	}
}

Dieses Beispiel wurde gewählt, da beim Sortieren eines Array Klassen aus java.util.* durchlaufen werden:

Das Step-Filter filtert nun den Stack-Trace mit den in den Preferences eingestellten Step-Filters:

Nach dem Einschalten des Step-Filters und erneuten catchen am Breakpoint sind die beiden Aufrufe "java.util.Array.sort(java.lang.Object) line: 1080" und "java.util.Arrays.mergeSort(java.lang.Object, java.lang.Object,int, int, int) line: 1156" verschwunden. Das Package java.util.* ist in der Grundeinstellung von Eclipse bereits als Step-Filter definiert.

Downloads#

Installation#

Das von Eclipse mitgelieferte Plugin braucht nur ersetzt das hier erhältliche ersetzt werden:
  1. Passende Plugin-Datei herunterladen
  2. Eclipse beenden
  3. Plugin im Verzeichnis /eclipse/plugins/org.eclipse.jdt.debug.ui... löschen
  4. Heruntergeladenes Plugin an die Stelle ablegen
  5. Eclipse neu starten