[[BacklogDebugger-BacklogDebugger]]
= BacklogDebugger

*Since Camel 2.12*

Camel supports a backlog debugger that is used for live debugging of
messages that are routed in Camel. 
The backlog debugger has additional functionality for easier debugging
aimed at tooling, than the 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
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
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 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
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
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 Exchange
at the node.

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

[[BacklogDebugger-Enabling]]
== Enabling

You would need to enable this using the JMX API.

