Skip navigation

Ozone — Debugging Features

Ozone offers well-known debug controls and information windows, such as Source Viewer, Disassembly, Variable/Symbol Windows, Register View, and Memory Window.

  • Stand-alone graphical debugger
  • Debug output of any tool chain and IDE 1
  • C/C++ source level debugging and assembly instruction debugging
  • Debug information windows for any purpose: disassembly, memory, globals and locals, (live) watches, CPU and peripheral registers
  • Source editor to fix bugs immediately
  • High-speed programming of the application into the target
  • Direct use of J-Link built-in features (Unlimited Flash Breakpoints, Flash Download, Real Time Terminal, Instruction Trace)
  • Scriptable project files to set up everything automatically
  • New project wizard to ease the basic configuration of new projects

1 Ozone has been tested with the output of the following compilers: GCC, Clang, ARM, IAR. Output of other compilers may be supported but is not guaranteed to be.



Furthermore static information including functions and compiled source files lists provide an overview of the debugged application. Conditional Code Breakpoints and Data Breakpoints add full control over the system, while variables and register values can be modified to change the execution behavior. Advanced debugging features, such as live watches, data graphs, and real-time terminal I/O further extend the debugging capabilities, enabling advanced analysis of your application.

For even deeper system insight and for performance analysis, Ozone can trace system execution. Read more about Ozone Trace Features.

Source Viewer

The Source Code Viewer provides overview and enables navigation through the target application. It shows current program execution by highlighting the active source line, allows you to set source-code breakpoints to halt program execution, and lets you modify program execution by letting the application run from any location.

Individual source code lines can be expanded to reveal the affiliated assembly code instructions. You can easily check the generated code for source lines of interest without jumping back and forth with the disassembly window. Each source line which generated code for the application shows an expansion indicator to show or hide the lines disassembly.

The Source Viewer supports syntax highlighting for C/C++ code and assembly instructions.

The fonts can be changed in the preferences to fit your visual needs. You can easily adjust the font size by scrolling the mouse-wheel while holding down the control key.

Symbol values and expressions can quickly be shown in a mouse-over tool tip. Hovering the mouse cursor over a variable displays the variable value if available. Hovering over selected text evaluates the selection as an expression and shows the result in the tool tip.

The document header bar provides you with the ability to quickly navigate to a particular function within  the active document. The header bar hosts two drop-down lists. The drop-down list on the left side contains all function scopes (namespaces or classes) present within the active document. The  drop-down list on the right side lists all functions that are contained within the selected scope. When a function is selected, the corresponding source line is highlighted and scrolled into view




Ozone's Disassembly Window displays the assembly code interpretation of MCU memory content. The window automatically scrolls to the position of the program counter when the program is stepped; this allows you to follow program execution on the machine instruction level.

The Disassembly Window provides two display options - Show Source and Show Labels - that augment instructions with source code and symbol information. Both information types can be separately shown or hidden.


With Ozone you can set different types of breakpoints: Source breakpoints, instruction breakpoints, and data breakpoints (watchpoints). Ozone shows detailed information for each breakpoint and provides full control to modify them.

With the J-Link Flash Breakpoint technology, you can set as many breakpoints as you want. You are not limited to the available number of hardware breakpoints, and you do not have to modify your application to run in RAM. Simply set breakpoints and do not worry about them.

The Breakpoint Window displays various information about set breakpoints. Source breakpoints can be expanded to show the resulting instructions on which a breakpoint is set. For all breakpoints you get address information, implementation if it is a hardware or software breakpoint, context for easier identification.

Breakpoint behavior can be modified to halt the debugger only in certain situations. You can set a skip count to only halt after the breakpoints has been hit x times. Or you enter an expression which is evaluated to only halt when its result is true. Conditions can for example be set to break only when an overflow variable flag is set. With OS awareness, you can also apply a task filter to only halt when the target system is execution in a given task.




Ozone's symbol windows allow you to watch and edit symbols (variables and function parameters).

With the Watched Variables Window you can select which symbols to show. You can drag and drop symbols from other windows or from the Source Viewer into it or enter them manually. Watched Variables can be updated periodically, if supported by the target, while the application is running.

The Local Symbols Window shows symbols that are in the scope of the current execution point, the current function. It can display the local symbols of any function on the call stack.

The Global variables Window shows all global and file static symbols.


The current CPU registers are shown in Ozone's Registers Window. In addition to the basic CPU registers, Ozone can also display memory-mapped peripheral registers (SFRs).

All registers are grouped. You can expend register groups of interest. Registers with special bit flags can be further expanded to show the value and description of bit fields.

Ozone includes change level highlighting. When the application is halted, recently changed register values are highlighted. Register values that changed last with the previous halts are highlighted, too. This feature enables you to easily identify what your application is doing.


Terminal I/O


Ozone supports printf-style terminal I/O from the target application. An application may send and receive text messages by employing one or multiple of the I/O techniques described below. Text  output from the application is shown within the Terminal Window.

Real Time Transfer

Ozone directly includes the use of SEGGER's Real Time Transfer (RTT) technology.

With RTT it is possible to output information from the target microcontroller as well as sending input to the application at a very high speed without affecting the target's real time behavior. SEGGER RTT can be used with any J-Link model and any supported target processor which allows background memory access, which are Cortex-M and RX targets.


Ozone can display printf output sent via the Cortex-M Single Wire Output (SWO) pin.SWO is unidirectional, it cannot be used to send data to the target application.


Ozone is able to communicate with the application program via semihosting. Next to providing bi-directional text I/O via the Terminal Window, the application program can employ Semihosting to perform advanced operations on the host PC, such as reading from files. Semihosting cannot be used with real-time target applications, as the target needs to be halted to handle semihosting commands.