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 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.
Note:
It is recommended that you have read Getting Started
before tackling this document.