This part of the document explains how to use Simics as a tool in low-level software development. In this setting, Simics plays two roles:
- execution platform
The software is run on a simulated target machine inside Simics.
- debugger
Simics can either function as a stand-alone debugger, or as a debugger backend for an external debugger. The main Simics debugger is provided in Simics Analyzer.
Simics Analyzer provides a full symbolic debugger for C and C++. This is described in the Simics Analyzer User's Guide. The debugger in Simics Analyzer is also capable of tracking software running on target machines, to give you the ability to debug individual processes, threads and tasks. Also, Simics provides some debugging capabilities.
Using Simics as a debugger has some major benefits compared to debugging on real hardware:
- Debugging is completely non-intrusive.
- You can inspect and modify the state of the entire target system, at any level. This is especially convenient when debugging low-level code such as firmware and hardware drivers.
- The simulation is completely deterministic. Once you manage to trigger a bug, you can repeat it as often as you like.
- You have complete control over time. For example, you can freeze time while inspecting the target, save the simulated state in a checkpoint and restore it at a later time, and even run the whole simulation backward.
It is recommended that you have read Getting Started before tackling this document.