With other debuggers I have always used debug break statements in the source code to good advantage, e.g.
if (i<0) Debugger("i<0 you idiot!")
which halts the program and breaks into the debugger to display the message. I have been expecting to find something similar in AVR studio but now I am beginning to think it isn't there. If not, how would you get a similar effect without manually marking all the breakpoints? Calling a single subroutine would allow just one breakpoint but requires tedious display of the calling string in memory and then stepping back to the caller to get the context.
Also, using JTAG-ICE on hardware isn't the program flash rewritten every time you toggle a breakpoint? I wouldn't worry so much about hardware debugging if I could write all the breakpoints in an initial flash (the simulator RS232 output to hapsim can be painfully slow).