Ozone — standard debug features
Ozone is a full-fledged multi-platform debugger and performance analyzer with features that go well beyond those of a typical debugger.
Standard debug features
As a full-featured debugger, Ozone includes all common debug features, that developers need and are familiar with. Features include code views, symbol and data windows, register and memory displays. Ozone goes beyond typical debug use cases to enable efficient and extensive debugging within a fully integrated UI.
Source Code Viewer
The Source Code Viewer is the core of Ozone's graphical user interface. It enables navigation through the firmware's source code with syntax highlighting for C/C++, Assembly and Rust. Jump to symbol declaration or into function definition provides an overview into the project's structure. The Source Code Viewer's header bar and Ozone's capabilities to find functions, global data, and source files further expand on this capability.
While debugging, users can quickly evaluate symbol values and expressions with mouse-over tool tips and Quick Watch. For longer observation symbols can be dragged and dropped directly from the source code into the Watched Data window or into the Data Sampling window.

Selective interleaving of source and disassembly
The Source Code Viewer's most valuable feature for embedded firmware development is its inline disassembly view.
Users can expand every code line to reveal the instructions the compiler generated for this line. In contrast to traditional disassembly views, the inline disassembly immediately identifies all associated instructions, even when they are placed in non-contiguous blocks. With inline disassembly users can check and verify the compiler's code generation.
Moreover, users can selectively step through complex expressions at the instruction level to trace the exact behavior in critical situations.
Disassembly window
The Disassembly window displays the firmware's computer code at its lowest level. It analyzes the firmware binary and target memory to show what the target hardware is going to execute. It displays each instruction, along with its address, machine code, and assembly code. The assembly code is enriched by commonly used, matching pseudo instructions; dereferenced offsets and their value; referenced symbol values and jump targets.
The Disassembly window can display associated source code for instruction blocks inline, as well as labels, in order to identify functions and (read only) data blocks.
Ozone synchronizes the Disassembly window and the Source Code Viewer to automatically display the code currently being executed on source and instruction level. Users can jump from disassembly to corresponding source code and vice versa. Even when no source code is available, the Disassembly window provides information important for comprehending the firmware's code.
Some devices have custom extensions to the instruction set. This is fairly common with RISC-V-based target devices. Ozone's disassembly view can be extended to display custom instructions. More information
Window synchronization
Ozone always puts the debug state into perspective, and it provides a complete overview across all its windows through synchronized views. On halt the Source Code Viewer and Disassembly window show the location of the currently executed code, in line with current symbol values and register contents in their respective windows.
When a user navigates through the call stack or the task list, these views are updated and provide full insight into what happened before or in parallel. The action of stepping back in time through the instruction trace is synchronized with the source code and timeline for easy high-level debugging of the past.
Change-level highlighting
Ozone assists users in quickly identifying changes in system's state throughout a debug session. Each time a symbol, register contents, or data in memory changes, the corresponding value is highlighted.
In addition, Ozone features change-level highlighting. With every update cycle, highlighted unchanged values gradually change to indicate when the most recent change occurred. As a result, users can easily recognize how target states evolve from cycle to cycle – specifically in combination with periodic refresh or looped break-and-continue cycles.
Observation of variable values
Along with insights into code, Ozone presents valuable information about variable values and a system's state.
Data symbols can be analyzed in three windows, that offer easy access to relevant information and high flexibility. The Global Data window includes all global and static symbols, that provides a full overview of data used by the system. The Local Data window adds local symbols, that are present in the currently active function or code block. The Watched Data windows provide full flexibility to selectively view global data symbols, single members of a struct or array, and expressions.
All Data windows display information about symbol values in different formats, their location in memory or registers, data size, and type and access information.
All values are updated when the target state changes. In addition the Watched Data windows feature a periodic refresh function that lets users monitor changing data while the target system is running.
Registers window
The Registers window enables closer analysis of the state and behavior of a CPU and its peripherals. Ozone displays CPU registers, including control and status registers and their fields, as well as co-processor registers. Additionally, Ozone can display memory-mapped peripheral registers (SFRs). The registers are organized in groups, that can be selectively added and expanded. For full flexibility Ozone features multiple instances of Register windows, that further help to organize register groups and keep important information in view.
Memory window
The Memory window provides a view into the target system's Flash and RAM. It displays memory contents in a hex editor, which allows memory to be read and modified. In addition, the ASCII representation helps with easy identification of strings and patterns. All data symbols can be revealed and highlighted in the Memory window to aid analysis of complex structs and arrays, as well as symbol surroundings.
Finally, users can save data from the memory window into a binary image file or load binary image files, that are directly downloaded into the target system's memory.
Project information — functions and source files
Ozone can display lists of all functions and source files stored within firmware debug information. With the Functions window, these items are viewable in memory as disassembly code, or directly in a source file. The list includes information about addresses, sizes, and numbers of instances. The Source Files window provides information about status (included or compiled) and the location on the file system at build time. Compiled files are also listed with information on size and numbers of instances.




