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 CFUNITED 2010 (Landsdown, VA) with: Ryan Jeffords

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  
 
 
 


Reader Comments