[[BacklogDebugger-BacklogDebugger]]
BacklogDebugger
~~~~~~~~~~~~~~~

*Available as of Camel 2.12*

Camel supports a backlog debugger that is used for live debugging of
message they are routed in Camel. 
The backlog debugger has additional functionality for easier debugging
aimed at tooling, than the link:debugger.html[Debugger]. The backlog
debugger is exposed in JMX in the tracer node with the name
`BacklogDebugger`. The JMX API is defined in the
`org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean`
interface.

You can enable or disable the BacklogDebugger dynamically, by calling
`enableDebugger` or `disableDebugger` methods.

[[BacklogDebugger-Options]]
Options
^^^^^^^

[width="100%",cols="10%,20%,70%",options="header",]
|=======================================================================
|Option |Default |Description

|`enabled` |`false` |Whether the debugger is enabled or not.

|`singleStepMode` |`false` |Whether currently in single step mode of a single
link:exchange.html[Exchange].

|`bodyMaxChars` |`128kb` |To limit the message body to a maximum size in the traced message. Use 0
or negative value to use unlimited size.

|`bodyIncludeStreams` |`false` |Whether to include the message body of stream based messages. If enabled
then beware the stream may not be re-readable later. See more about
link:stream-caching.html[Stream Caching].

|`bodyIncludeFiles` |`true` |Whether to include the message body of file based messages. The overhead
is that the file content has to be read from the file.
|=======================================================================

[[BacklogDebugger-Operations]]
Operations
^^^^^^^^^^

[width="100%",cols="10%,20%,70%",options="header",]
|=======================================================================
|Option |Type |Description

|`enableDebugger` |`void` |To enable the debugger

|`disableDebugger` |`void` |To disable the debugger

|`getDebuggerCounter` |`long` |Gets the total number of debugged messages.

|`resetDebuggerCounter` |`void` |To reset the debugger counter.

|`dumpTracedMessagesAsXml(nodeId)` |`String` |To dump the debugged messages from the give node id in XML format.

|`addBreakpoint(nodeId)` |`void` |To add a breakpoint at the given node.

|`addConditionalBreakpoint(nodeId, language, predicate)` |`void` |To add a conditional breakpoint at the given node. The predicate is
created from the link:languages.html[language] parameter.

|`removeBreakpoint(nodeId)` |`void` |To remove the breakpoint from the given node id.

|`resumeBreakpoint(nodeId)` |`void` |To resume a suspend breakpoint, which will then continue routing the
link:exchange.html[Exchange].

|`resumeAll` |`void` |To resume all suspended breakpoints.

|`getSuspendedBreakpointNodeIds` |`Set<String>` |To get a set of all the nodes which has suspended breakpoints (eg an
link:exchange.html[Exchange] at the breakpoint which is suspended).

|`stepBreakpoint(nodeId)` |`void` |To start single step mode from a suspended breakpoint at the given node.
Then invoke `step` to step to next node in the route.

|`step` |`void` |To step to next node when in single step mode.

|`getBreakpoints` |`Set<String>` |To get a set of all the nodes which has a breakpoint added.

|`enableBreakpoint(nodeId)` |`void` |To active a breakpoint which has been temporary disabled.

|`disableBreakpoint(nodeId)` |`void` |To disable a breakpoint temporary.

|`setMessageBodyOnBreakpoint(nodeId,body)` |`void` |To update the message body on the suspended link:exchange.html[Exchange]
at the node.

|`setMessageHeaderOnBreakpoint(nodeId,headerName,value)` |`void` |To update/add the message header on the suspended
link:exchange.html[Exchange] at the node.
|=======================================================================

[[BacklogDebugger-Enabling]]
Enabling
^^^^^^^^

You would need to enable this using the JMX API.

[[BacklogDebugger-SeeAlso]]
See Also
^^^^^^^^

* link:backlogtracer.html[BacklogTracer]
* link:debugger.html[Debugger]
* link:log.html[Log]

