2 Replies Latest reply on Jan 13, 2010 6:52 AM by andyf9

    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.




        • 1. Re: My experiences with the debugger

          Hi, say I have multiple local domains pointing to my.first.domain and my.second.domain.  I am able to set up the RDS with my.first.domain port 80, but when I try to add my.second.domain port 80, it throws an error saying "Server with the same home and port already exists. Existing server: my.first.domain.


          Any idea to fix this?  Thanks.

          • 2. Re: My experiences with the debugger
            andyf9 Level 1

            Why do you need to add the same server twice?

            Don't you just add a server at and use the same server in CFBuilder for the debug configuration of both projects?

            The fact that you have different domains is just due to the way you have configured your webserver.


            Unless you have a JRun multi server configuration when you could be running 2 different servers. Then you'd need to provide context roots to differentiate them.


            As I understand it you connect to RDS for the server as a whole and CFBuilder determines which project you are debugging based on the path of the running code.


            But I'm just guessing here. I don't have a separate webserver running for development. I use the built in one on port 8500.


            Hope that is some help.