2019 Volume 27 Pages 489-498
In modern computer processors, the order of memory access instructions in a program (the “program order”) is not necessarily the same as the order in which the instructions are reflected in memory (the “memory order”). This means that the memory order has to be taken into account when verifying concurrent programs. We previously developed a library, MMLib, that facilitates model checking of programs by enabling the memory order to be taken into account when using the SPIN model checker. The input to SPIN is a model of the program written in Promela, an imperative style modeling language. When SPIN detects an error, it generates a trace of the execution path that led to the error. To determine what caused the error, the user has to understand this counterexample. However, counterexamples of models written using MMLib are difficult to understand because include internal MMLib execution steps, and the user has to interpret the internal data structures of MMLib to understand the memory order. We have now In this paper, we developed software for visualizing counterexamples of models written using MMLib. It visualizes execution of the model step by step along the path of the counterexample. It skips visualizing the internal MMLib steps and visualizes only the execution of each step corresponding to statement in the user model. It also highlights memory access instructions that have been executed but have not yet been reflected in memory. This makes users aware of when the memory order differs from the program order.