code: public static List<StackTraceElement> captureStackBelow(Class<?>... clazzes) {
  		List<Class<?>> toIgnore = new ArrayList<>(clazzes.length + 1);
  		toIgnore.addAll(Arrays.asList(clazzes));
  		toIgnore.add(StackDumper.class);
  
  		Predicate<StackTraceElement> isSkipped = element -> toIgnore.stream().anyMatch(clazz -> {
  			String name = element.getClassName();
  			return name.equals(clazz.getName()) || name.startsWith(clazz.getName() + "$$Lambda");
  		});
  
  		List<StackTraceElement> rawStack = Arrays.asList(Thread.currentThread().getStackTrace());
  		ListIterator<StackTraceElement> iterator = rawStack.listIterator();
  
  		// iterate until we find something skipped
  		while (iterator.hasNext() && !isSkipped.test(iterator.next())) {}
  
  		boolean foundSomethingToSkip = iterator.hasNext();
  		if (foundSomethingToSkip) {
  			// iterate unti we find something not skipped
  			while (iterator.hasNext() && isSkipped.test(iterator.next())) {}
  			// the filtering was successful!
  			return rawStack.subList(iterator.previousIndex(), rawStack.size());
  		} else {
  			// we didn't find something to skip, so we'll return the whole stack
  			return rawStack;
  		}
  	}
docs: Captures all of the current stack which is below the given classes.