A synopsis of the major version history of the project.
In this section, you will find the release notes for each version we release under this major version. If you are looking for the release notes of previous major versions use the version switcher at the top left of this documentation book. Here is a breakdown of our major version releases.
We continue to set the foundations of an HQ service with the addition of ColdBox 7 support, new collectors, performance optimizations, slowest transactions, and much more.
This was a complete rewrite of the module to support standalone capabilities and the foundation of the upcoming CBDebugger HQ.
We migrated the entire UI to leverage AlpineJS and ColdBox Elixir and set the foundation of the new upcoming UI rewrite.
Added SQL support for ORM and Adobe queries with IDE integrations.
A movement to modern engines and a streamlined UI for inclusion in all applications. REST Application support was added alongside ColdBox 6 support.
The initial release.
The ColdBox Debugger module is a lightweight performance monitor and profiling tool for ColdBox applications.
The ColdBox Debugger module is a lightweight performance monitor and profiling tool for ColdBox applications. It can generate a nice debugging panel on every rendered page or a dedicated visualizer to make your ColdBox application development nicer, more funner and greater! Yes, funner is a word!
The ColdBox Debugger tracks your requests, whether Ajax, traditional, or REST, its environment, execution, etc. Here is a listing of some of the capabilities you get with the ColdBox Debugger:
Track all incoming requests to your applications
Track exceptions and execution environment
Track incoming HTTP requests, parameters, body, and much more
Track final request collections
Lucee 5+
ColdFusion 2018+
ColdBox 6+
ColdBox Debugger is maintained under the guidelines as much as possible. Releases will be numbered in the following format:
And constructed with the following guidelines:
Breaking backward compatibility bumps the major (and resets the minor and patch)
New additions without breaking backward compatibility bumps the minor (and resets the patch)
Bug fixes and misc changes bump the patch
Apache 2 License:
Source:
ForgeBox:
Community:
Issues:
This module is professional open-source software backed by offering services like:
Custom Development
Professional Support & Mentoring
Training
Server Tuning
Because of His grace, this project exists. If you don't like this, then don't read it, it's not for you.
"Therefore being justified by faith, we have peace with God through our Lord Jesus Christ: By whom also we have access by faith into this grace wherein we stand, and rejoice in hope of the glory of God." Romans 5:5
Timer service rewritten to support nesting and included metadata
Ability to open views and layouts from the execution timers in any Code Editor
New WireBoxCollector which is only used if enabled. This greatly accelerates the performance of the request collector since before they where in the same collector.
Ability to open CFCs that are profiled by the WireBox Collector in any Code Editor.
Ability to open the Handler events that are profiled by the Request Collector in any Code Editor.
New life-cycle events: onDebuggerUnload, onDebuggerLoad
Ability for the custom timeIt() functions to accept metdata to store in the execution timer
New Slowest Queries panel for cborm, acf, and qb/quick
New visualizer total db time as well as request time including percentage of the request time
Ability to export a profiler in json
Ability to sort the visualizer's profilers
Timer service reconstructing the timer hashes and profilers twice.
timeIt() helper was not passing the closure correctly
If doing a fwreinit on the visualizer, the current profiler was still being show even thought it was empty. Add an empty check to avoid the big bang!
Empty response codes for Adobe, due to their incredibly weird Response object nesting.
Migration to java random id's for speed
Tracers are now streamlined and stored alongside the request profilers
Small UI fixes on request profiler HTTP methods
WireBox collecting is now done by the WireBox collector not the Request Collector.
Adobe 2016 Dropped
Track Hibernate and cborm queries, criteria queries, and session stats
Track qb and quick queries, entities, and stats
Tap into LogBox via our Tracer messages and discover logging on a per-request basis
Profile execution and results of ANY model object
Profile execution of ANY ColdBox interception point
Custom Timer helpers for adding timing methods and annotations anywhere in your code
Profile your production or development apps with ease
Track ColdBox modules and lifecycles
Track Hyper HTTP/S calls
Track Adobe ColdFusion Queries (ColdFusion 2018+)
Track Lucee Queries
Security Hardening
Code Reviews



Learn more about this book
The source code for this book is hosted on GitHub: https://github.com/ortus-docs/cbdebugger-docs. You can freely contribute to it and submit pull requests. Ortus Solutions, Corp copyrights the contents of this book and cannot be altered or reproduced without the author's consent. All content is provided "As-Is" and can be freely distributed.
The majority of code examples in this book are done in cfscript.
The majority of code generation and running of examples are done via CommandBox: The ColdFusion (CFML) CLI, Package Manager, REPL - https://www.ortussolutions.com/products/commandbox
Flash, Flex, ColdFusion, and Adobe are registered trademarks and copyrights of Adobe Systems, Inc.
The information in this book is distributed “as is” without warranty. The author and Ortus Solutions, Corp shall not have any liability to any person or entity concerning loss or damage caused or alleged to be caused directly or indirectly by the content of this training book, software, and resources described in it.
We highly encourage contributions to this book and our open-source software. The source code for this book can be found in our GitHub repository where you can submit pull requests.
10% of the proceeds of this book will go to charity to support orphaned kids in El Salvador - . So please donate and purchase the printed version of this book; every book sold can help a child for almost 2 months.
Shalom Children’s Home is one of the ministries that are dear to our hearts located in El Salvador. During the 12-year civil war that ended in 1990, many children were left orphaned or abandoned by parents who fled El Salvador. The Benners saw the need to help these children and received 13 children in 1982. Little by little, more children came on their own, churches and the government brought children to them for care, and the Shalom Children’s Home was founded.
Shalom now cares for over 80 children in El Salvador, from newborns to 18 years old. They receive shelter, clothing, food, medical care, education, and life skills training in a Christian environment. The home is supported by a child sponsorship program.
We have personally supported Shalom for over 6 years now; it is a place of blessing for many children in El Salvador who either have no families or have been abandoned. This is a good earth to seed and plant.
<major>.<minor>.<patch>
Luis Majano is a Computer Engineer that has been developing and designing software systems since the year 2000. He was born in San Salvador, El Salvador in the late 70’s, during a period of economical instability and civil war. He lived in El Salvador until 1995 and then moved to Miami, Florida where he completed his Bachelors of Science in Computer Engineering at Florida International University. Luis resides in Houston, Texas with his beautiful wife Veronica, baby girl Alexia and baby boy Lucas!
He is the CEO of Ortus Solutions, a consulting firm specializing in web development, ColdFusion (CFML), Java development and all open source professional services under the ColdBox and ContentBox stack. He is the creator of ColdBox, ContentBox, WireBox, MockBox, LogBox and anything “BOX”, and contributes to many open source ColdFusion/Java projects. You can read his blog at
Luis has a passion for Jesus, tennis, golf, volleyball and anything electronic. Random Author Facts:
He played volleyball in the Salvadorean National Team at the tender age of 17
The Lord of the Rings and The Hobbit is something he reads every 5 years. (Geek!)
His first ever computer was a Texas Instrument TI-86 that his parents gave him in 1986. After some time digesting his very first BASIC book, he had written his own tic-tac-toe game at the age of 9. (Extra geek!)
Keep Jesus number one in your life and in your heart. I did and it changed my life from desolation, defeat and failure to an abundant life full of love, thankfulness, joy and overwhelming peace. As this world breathes failure and fear upon any life, Jesus brings power, love and a sound mind to everybody!
“Trust in the LORD with all your heart, and do not lean on your own understanding.” Proverbs 3:5
He has of late (during old age) become a fan of organic gardening.
January 2024
CBDebugger 4.2 comes action-packed with tons of new features, improvements and bug fixes. Let's check out the major areas of improvement.
You can now track Hyper http/s requests right in a new panel. It will also aggregate the request's total time, slowest, grouped, and timeline. It also comes with some great options for configuration:
The ColdBox debugger can now profile any SQL running via Lucee queries. It will provide grouped, timeline, and slowest views as well. However, you must make sure that Lucee is in debugging mode.
IMPORTANT Please note that to use this feature the engine must have two debugging settings enabled
You can easily add those to your .cfconfig.json or enable it under the Debugging panel in the Lucee Admin.
Here are the configuration settings available for it:
You now can generate Java heap dumps from the debugger visualizer so you can analyze the heap offline. Great for debugging memory leaks or just system stability.
The request dock has now been cleaned up to only show the request's information and the UI updated for a better and seamless dock UI. The rest of the information has been moved to the visualizer at the /cbdebugger entry point.
Once you click on the dock, it will expand to show the current request's debugging information.
We have added new improvements to visualizing SQL and JSON in the context panels.
You can now add timers manually into the tracking facilities via the Timer object's add() method or via the TimerDelegate and the addCBTimer() method.
You can get access to the Timer object in different ways:
New HyperCollector so you can now track hyper requests if enabled
Timer can now add timers a-la-carte via the add() method
TimerDelegate now has a addCBTimer()
The request panel dock is now a real dock and the only one presented, the rest are only show in the visualizer
The requestTracker.expanded option is now removed, it's always expanded for visualizer and contracted for the dock
Updated test harness UI to make it easier to create debugging events
Dumb whitespace added by CFML engines when doing inline <pre>#method()#</pre> calls.
Better error handling when Debugger assets are not compiled instead of a cryptic error message: The parameter [str] to function [closure_m] is required but was not passed in.
// Hyper Collector
hyper : {
enabled : false,
expanded : false,
logResponseData : false,
logRequestBody : false
}New fast and furious and tiny SQL/JSON Formatter
New LuceeSqlCollector you can use to profile all SQL calls in Lucee
New luceeSql configuration to control the Lucee SQL calls collector
Changed the instance argument to any in the debuggerService.openInEditorURL to allow for a flat representational string of the URL to open in the editor.
Ability to download a heap dump snapshot from the visualizer

"debuggingDBEnabled":"true",
"debuggingEnabled":"true",luceeSql : {
enabled : true,
expanded : false,
logParams : true
},/**
* Add a timer to the stack manually. You will need the label,
* executionTime and stoppedAt timestamps
*
* @label The label to use as a timer label
* @executionTime The execution time in ms to register
* @startedAt The date time the timer was started
* @stoppedAt The date time the timer was stopped
* @metadata A struct of metadata to store in the execution timer
* @parent An optional parent label
* @type The type of execution timed: request, view-render, layout-render, event, renderer
*/
function add(
required label,
required executionTime,
startedAt = now(),
stoppedat = now(),
struct metadata = {},
parent = "",
type = "timer"
)// Get in your layouts/handlers/views/interceptors
getInstance( "Timer@cbDebugger" )
// Inject
property name="timer" inject="Timer@cbdebugger"
// ColdBox 7 Delegates
component delegates="TimerDelegate@cbdebugger"{}







