CloverETL allows you to create a simple data transformation with just Drag&Drop UI, but sometimes you need something more complex and then writing code in CTL (Clover Transformation Language) comes in handy.
You can say that CTL is simplified Java, with some limitations - no inheritance, no exceptions, focused on a standard issues found in data manipulation processes.
And when you are writing code, you would like to have some debugging functionality. Before version 4.3.0 it was a bit old school. printLog function all over the place and digging through log output in Console view.
Since 4.3.0 CTL debugging was introduced and you can read about it in this great blog post http://blog.cloveretl.com/code-debugging-cloveretl-designer .
CloverETL also offer functionality of writing your transformation in Java if needed. Common use cases are implementing non-existent functionality in CTL or re usability of existing Java code. Java transformation could be used pretty much anywhere you can use CTL (Reformat, Denormalizer, Normalizer components etc.).
Debugging functionality is implemented not only for CTL, but for Java code too. Whole debugging experience should be really familiar if you ever debugged Java code in the Eclipse.
I won't repeat content of a mentioned blog, which describes all available functionality, this should only be a short brain dump to remind me that CTL debugging is in CloverETL designer out of box, you need just put 'breakpoint' into your ctl code and run your graph in Debug mode. What I keep forgetting is if you need to debug Java code, you need to enable Java debugging in Window > Preferences. (It uses communication on port 4444 by default, so if you are running CloverETL on a tightly locked box you would need to enable that port on your firewall!)
Allow me to steal picture worth of thousands words: