Multi-processor Systems-on-a-Chip (MPSoCs) are proven to be the way to address performance and power consumption issues for modern embedded systems. However, the side-effects of concurrency, the heterogeneity of their components and the growing complexity of software pose new challenges on the software programming and debugging tasks. Due to their inherent non-deterministic behavior, MPSoCs are prone to concurrency bugs (e.g. data races and deadlocks).
Debuggers targeting parallel systems have further requirements than those targeting traditional sequential systems in that they need to provide a holistic system view and ease the correlation of events from different sources. Moreover, a debugger for a system bearing such complexity should provide an abstracted perspective to the user. This makes possible to give emphasis to places of the code which are relevant to the current debug tasks.
Furthermore, it is important to maintain an unmodified execution environment when debugging parallel software. In this way, it is possible to avoid covering up concurrency bugs that highly depend on slight timing variations. Nowadays, ESL methodologies (e.g. Virtual Platforms) provide sufficient visibility, controllability, reproducibility and determinism, and are thus desired to support MPSoC debugging. In fact, these characteristics make virtual platforms more appealing and powerful to debug than the actual hardware.