My experiences with the debugger
I've been using the debugger in CFBuilder fairly extensively and here are some of my observations. I should point out that the project that I have been working on is using the Reactor framework. It uses some fairly massive objects with several recursive links between objects in the graph. It's also using ModelGlue and ColdSpring which put all their data in the application and request scopes (IIRC) making showing them on Variables tab essentially useless.
I'd also like to add that I think that you've done a fantastic job so far on the debugger. It was the thing that I missed most when it stopped working in CFStudio. It has increased my productivity immensely.
1) When trying to step over code the debugger sometimes freezes and never hits the next line. I can make this request complete by hitting the 'Restart Debugger Server' button in CF admin. The problem is exacerbated by having Reactor objects being displayed in the 'Expressions' tab or in the 'Variables' tab. In fact I've had to turn off all output of debugger scopes by default (in Preferences->ColdFusion->Debug Settings->Debugger scopes) to be able to make it usable. I only add a variable to the expressions tab when I need to view it and remove it again afterwards. I suspect that this freezing is due to large objects being passed between the server and CFBuilder, and also possibly recursive object graphs?
2) Sometimes when adding output of even a simple variable to the Expresssions view the message '<error(s)_during_the_evaluation>' or no output is displayed. I can right click the var and choose 'Reevaluate Watch Expression' and it is normally displayed (sometimes requires multiple attempts). I then step to the next line and the watches may display properly or may be blanked. There doesn't appear to be any consistency to it. Not a biggie, but fairly annoying.
3) Sometimes watches on arrays are not displayed as arrays but as a string representation of the array (I assume this is due to how the server communicates the data to CFBuilder)
4) There is no way to set conditional breakpoints. Sometimes I'd like to be able to say 'Stop at this breakpoint on the 5th pass' or whatever number. I'd really like to be able to do conditional breakpoints where I say 'Stop when x=1'.
5) When watching an object graph I often see '<<Recursive Reference - Cannot display value>>'. It would be helpful if I could drill down into this reference. I assume this is because the watch is getting all of the data for the watch when the breakpoint is hit. Could it just get the root data and then get the child branches as I expand them? This would mean that it could deal with the recursive references and additionally probably wouldn't experience the massive slowdowns when I've left too many watches on or have accidentally started dumping the application scope to the variables tab.
Regards,
Andy
