Hi Aaron
Since the uTasker project concentrates on smaller Ethernet enabled processors (whereby the LPC23xx and LPC24xx are at the higher end) and attempts to make the most of the internal resources all configurations also use smallest memory optimisation - also debug (the idea being that one is then debugging the final code rather than something just similar to it - in some cases the optimisation enables the code to fit in the chip and without it it may no longer be possible).
However I never really noticed problems to single step (I used Crossworks tonight on an LPC2378 and this stepped nicely). But I also known that often debuggers are rather easier to control without optimisation set high. Generally the LPC23xx can be a bit tricky for some reason - I find that it is not possible to step through the PLL setup (letting it run though it is OK though).
The hardware breakpoints are quite limited too. I tend to make sure that only the one really required is activated (having too many could also cause problems with stepping, but I believe Crossworks warns of this rather than just missing a step). Sometimes it is also useful to try stepping in disassembler since this is usually easier for debuggers in some instances (eg. some branches which could go different ways) source level stepping may miss a breakpoint since it may try to set several to catch the path actually taken - an older version of Codewarrior was notorious for this and switches had to be stepped in disassembler otherwise it would never stop when trying to step).
Debugging on the LPC23xx MUST be performed with the watchdog disabled (see
http://www.utasker.com/forum/index.php?topic=521.msg2223#msg2223). This can be either disabled by setting _DEBUG_CODE_ in app_hw_lpc23xx.h (at least in the latest version) or by pulling a specified port to '0' (specified also in this file - eg. P0-18 on the OLIMEX_LPC2378_STK [holding down BUT 2 at reset]. If it ran once the power must also be removed so that it actually stops again...
Regards
Mark