Skip to main content
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Tyler Schofield
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Tyler Schofield

ColdFusion CFDump, Circular References, And 500 null

By
Published in

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

Want to use code from this post? Check out the license.

Reader Comments

I believe in love. I believe in compassion. I believe in human rights. I believe that we can afford to give more of these gifts to the world around us because it costs us nothing to be decent and kind and understanding. And, I want you to know that when you land on this site, you are accepted for who you are, no matter how you identify, what truths you live, or whatever kind of goofy shit makes you feel alive! Rock on with your bad self!
Ben Nadel