Concolic Multiverse Debugging
Maarten Steevens, Tom Lauwaerts, Christophe Scholliers · 2024
Developing and debugging software for microcontrollers can be rather challenging. Firstly, microcontrollers are often programmed in low-level languages. Secondly, debugging tools are often very limited or simply non-existent. Thirdly, the non-deterministic nature of connected sensors, makes it hard to reproduce bugs. These challenges make finding and reproducing bugs in microcontroller programs tedious. To overcome these challenges, we propose building a new debugger for microcontrollers based on the ideas of multiverse debugging, which allows exploring all non-deterministic execution paths of a program. Our approach builds upon two main ideas: Time Travel and Concolic Debugging. Time Travel Debugging allows developers to explore execution both forwards and backwards in time. Concolic Debugging allows a developer to debug a specifically chosen execution of a non-deterministic program. When doing so concolic execution is used to mitigate the problem of state explosion. We call our novel approach that combines these two techniques Concolic Multiverse Debugging. In this demo we present our prototype Concolic Multiverse Debugger for the WARDuino WebAssembly virtual machine. We show how this prototype can be used to debug an STM32 powered robot.