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.