Ladybug adds functional/message based debugging to your Java application.
Call the Ladybug at certain checkpoints in you code (either directly or using AOP) to generate tree based reports.
Implement a rerun method to be able to rerun reports and optionally stub certain checkpoints.