Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
I am the chief technical officer at InVision App, Inc - a prototyping and collaboration platform for designers, built by designers. I also rock out in JavaScript and ColdFusion 24x7.
Meanwhile on Twitter
Loading latest tweet...
Ben Nadel at cf.Objective() 2014 (Bloomington, MN) with:

ColdFusion CFDump, Circular References, And 500 null

By Ben Nadel on
Tags: ColdFusion

Peter Bell ran into a circular reference problem when using CFDump. He kept getting 500 null because CFDump was entering an infinite loop and basically crapping out. The beauty of CFDump, though is that it provides a really great way of dealing with this. The CFDump TOP attribute limits the levels to which the CFDump algorithm will traverse.

To demonstrate this, let's store an object in the REQUEST scope that has a pointer to its parent scope, REQUEST. The circular reference here is pretty obvious:

  • <!--- Store an object in REQUEST. --->
  • <cfset REQUEST.Object = StructNew() />
  •  
  • <!---
  • Set the parent scope of the object. This should create
  • a circular variarable reference.
  • --->
  • <cfset REQUEST.Object.ParentScope = REQUEST />
  •  
  • <!--- Set some other variables for fun. --->
  • <cfset REQUEST.Object.Type = "Struct" />
  • <cfset REQUEST.Object.ID = "TEST_CFDUMP" />

Now, let' drying calling CFDump on this object. We know that this will go infinitely, so let's only go over 5 iterations:

  • <!---
  • Now, we want to try different values of CFDump's TOP
  • attribute to see how it handles circular references.
  • --->
  • <cfloop index="intDepth" from="1" to="5" step="1">
  •  
  • <h3>
  • CFDump Depth: #intDepth#
  • </h3>
  •  
  • <!--- CFDump out this object at the given depth. --->
  • <cfdump
  • var="#REQUEST.Object#"
  • label="REQUEST.Object"
  • top="#ToString( intDepth )#"
  • />
  •  
  • </cfloop>

Before we look at what this outputs, notice that I am calling ToString() on the depth variable that I pass to CFDump. This seems odd, and it is, but for some reason, if I try to just pass a numeric value to this attribute, I get the following error:

Invalid parameter type. The value specified, "1.0", must be a valid Integer.

Not sure why, but converting it to a string first seems to do the trick. This is what is output per iteration:

CFDump Depth: 1


 
 
 

 
ColdFusion CFDump Top 1  
 
 
 

CFDump Depth: 2


 
 
 

 
ColdFusion CFDump Top 2  
 
 
 

CFDump Depth: 3


 
 
 

 
ColdFusion CFDump Top 3  
 
 
 

CFDump Depth: 4


 
 
 

 
ColdFusion CFDump Top 4  
 
 
 

CFDump Depth: 5


 
 
 

 
ColdFusion CFDump Top 5  
 
 
 

Looking For A New Job?

100% of job board revenue is donated to Kiva. Loans that change livesFind out more »

Reader Comments

Post A Comment

You — Get Out Of My Dreams, Get Into My Comments
Live in the Now
Oops!
Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.