JMRI® is...
LogixNG
The Next Generation of Layout Automation
Tools
JMRI tools for working with your layout:
Layout Automation
Use JMRI to automate parts of your layout and operations:
Applications
By the community of JMRI.org:

JMRI Help:

Contents Index
Glossary FAQ

Donate to JMRI.org

JMRI: LogixNG Debugger

Sometimes it can be difficult to understand exactly what's going on in a ConditionalNG. LogixNG therefore has a debugger that allows a step by step walk thru a ConditionalNG to see what it's actually doing.

To use the debugger, it must be enabled. In Preferences ⇒ LogixNG, the option Install debugger must be enabled.

Using the debugger

To run a ConditionalNG using the debugger, click on the Debug button in the LogixNG ConditionalNG list. The status pane will open with the editor listing in the left section.

The Debugger menu will be in the menu bar.

Debug Menu

The debugger starts when the ConditionalNG is executed, for example when one of its actions or expressions triggers it. The ConditionalNG can also be executed by selecting the menu choice Debug ⇒ Execute.

The current action/expression has a thick top border before it is processed and and a thick lower border afterwards.

Debug Before Debug After

When the ConditionalNG has started executing, the debugger will stop it before the first action.

You can then step by step thru the ConditionalNG by selecting the menu item Debug ⇒ Step into. The debugger will then stop both before and after executing/evaluating the action/expression.

If the item has children, you can jump over the children by instead selecting the menu item Debug ⇒ Step over. Step over means that the debugger will process the children items without stopping before and after each one. When the children items have been processed, the debugger will stop after the parent item. Note: If a child has a breakpoint, processing will stop at that child even though step over is active.

If you want to run the ConditionalNG instead of stopping on each item, you select the menu item Debug ⇒ Run. Run is frequently used with breakpoints to stop at a particular row.

Breakpoints can be set on a row using the context menu.

Debug Breakpoint

The breakpoint border uses the same border concept for before and after.

Debug Breakpoint set

When the breakpoint occurs, the borders are combined.

Debug Breakpoint active

Status pane

On the right side of the debugger window, there are three panes. The top pane shows status if it's available. Example of status is the return value of expressions. If the debugger stops after an expression, the status pane will show the result of the expression, for example Return value True.

Debug Pane

Local variables pane

On the right side of the debugger window, the middle pane shows the current local variables.

LogixNG threads and the debugger

When the debugger stops before or after an action/expression in the ConditionalNG, it blocks further execution of both this ConditionalNG and all other ConditionalNGs that is executed in the same thread. It's therefore recommended to move the ConditionalNG to a separate thread when the debugger is used, so that the debugger doesn't block the other ConditionalNGs. See Edit ConditionalNG Threads.