Возможно, вы захотите взглянуть на AspectJ .
Вы можете прозрачно перехватывать и регистрировать выполнение кода, используя это. Я не уверен, что вы можете перехватывать каждое (скажем) if()
утверждение, но вы, безусловно, можете перехватывать вызовы методов и т. Д., И, надеюсь, вы сможете получить поток выполнения оттуда.