An alternate programmatic approach to debug specific classes when some condition in some class is met.
/*
* Breakpoint helper, stops based on a shared state
* STOP variable
*
* Everything in here should be chainable
* to allow adding to breakpoints
*/
public final class DEBUG {
/*
* global state controlling if we should
* stop anywhere
*/
public static volatile boolean STOP = false;
public static volatile List<Object> REFS = new ArrayList<>();
/**
* add object references when conditions meet
* for debugging later
*/
public static boolean ADD_REF(Object obj) {
return ADD_REF(obj, () -> true);
}
public static boolean ADD_REF(Object obj, Supplier<Boolean> condition) {
if (condition.get()) {
REFS.add(obj);
return true;
}
return false;
}
/*
* STOPs on meeting condition
* also RETURNS if we should STOP
*
* This should be set when a main condition is satisfied
* and can be done as part of a breakpoint as well
*/
public static boolean STOP(Supplier<Boolean> condition) {
if (condition.get()) {
STOP = true;
return true;
}
return false;
}
public static boolean STOP() {
return STOP(() -> true);
}
Where you want a condition to set the breakpoint
Where you want to stop based on a condition