Causal-Consistent Reversible Debugging

  • Elena Giachino
  • Ivan Lanese
  • Claudio Antares Mezzina
Part of the Lecture Notes in Computer Science book series (LNCS, volume 8411)


Reversible debugging provides developers with a way to execute their applications both forward and backward, seeking the cause of an unexpected or undesired event. In a concurrent setting, reversing actions in the exact reverse order in which they have been executed may lead to undo many actions that were not related to the bug under analysis. On the other hand, undoing actions in some order that violates causal dependencies may lead to states that could not be reached in a forward execution. We propose an approach based on causal-consistent reversibility: each action can be reversed if all its consequences have already been reversed. The main feature of the approach is that it allows the programmer to easily individuate and undo exactly the actions that caused a given misbehavior till the corresponding bug is reached. This paper major contribution is the individuation of the appropriate primitives for causal-consistent reversible debugging and their prototype implementation in the CaReDeb tool. We also show how to apply CaReDeb to individuate common real-world concurrent bugs.


Causal Dependency Causality Information FIFO Queue Port Result Atomicity Violation 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    Arya, K., Denniston, T., Visan, A.M., Cooperman, G.: Fred: Automated debugging via binary search through a process lifetime. CoRR, abs/1212.5204 (2012)Google Scholar
  2. 2.
    CaReDeb 0.5.0, a causal-consistent reversible debugger (2013),
  3. 3.
    Chen, S.-K., Fuchs, W.K., Chung, J.-Y.: Reversible debugging using program instrumentation. IEEE Trans. Software Eng. 27(8), 715–727 (2001)CrossRefGoogle Scholar
  4. 4.
    Chronon Systems. Commercial reversible debugger,
  5. 5.
    Cristescu, I., Krivine, J., Varacca, D.: A compositional semantics for the reversible pi-calculus. In: LICS, pp. 388–397. IEEE Computer Society (2013)Google Scholar
  6. 6.
    Danos, V., Krivine, J.: Reversible communicating systems. In: Gardner, P., Yoshida, N. (eds.) CONCUR 2004. LNCS, vol. 3170, pp. 292–307. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  7. 7.
    Feldman, S.I., Brown, C.B.: Igor: A system for program debugging via reversible execution. In: Workshop on Parallel and Distributed Debugging, pp. 112–123 (1988)Google Scholar
  8. 8.
    Grishman, R.: The debugging system AIDS. In: AFIPS 1970 (Spring), pp. 59–64. ACM (1970)Google Scholar
  9. 9.
    King, S.T., Dunlap, G.W., Chen, P.M.: Debugging operating systems with time-traveling virtual machines. In: USENIX Annual Technical Conference, General Track, pp. 1–15 (2005)Google Scholar
  10. 10.
    Koju, T., Takada, S., Doi, N.: An efficient and generic reversible debugger using the virtual machine based approach. In: VEE, pp. 79–88. ACM (2005)Google Scholar
  11. 11.
    Lamport, L.: Time, clocks, and the ordering of events in a distributed system. Commun. ACM 21(7), 558–565 (1978)CrossRefzbMATHGoogle Scholar
  12. 12.
    Lanese, I., Mezzina, C.A., Stefani, J.-B.: Reversing higher-order pi. In: Gastin, P., Laroussinie, F. (eds.) CONCUR 2010. LNCS, vol. 6269, pp. 478–493. Springer, Heidelberg (2010)CrossRefGoogle Scholar
  13. 13.
    LeBlanc, T.J., Mellor-Crummey, J.M.: Debugging parallel programs with instant replay. IEEE Trans. Comput. 36(4), 471–482 (1987)CrossRefGoogle Scholar
  14. 14.
    Lewis, B.: Debugging backwards in time. CoRR, cs.SE/0310016 (2003)Google Scholar
  15. 15.
    Lienhardt, M., Lanese, I., Mezzina, C.A., Stefani, J.-B.: A reversible abstract machine and its space overhead. In: Giese, H., Rosu, G. (eds.) FORTE 2012/FMOODS 2012. LNCS, vol. 7273, pp. 1–17. Springer, Heidelberg (2012)Google Scholar
  16. 16.
    Lu, S., Park, S., Seo, E., Zhou, Y.: Learning from mistakes: a comprehensive study on real world concurrency bug characteristics. In: ASPLOS, pp. 329–339. ACM (2008)Google Scholar
  17. 17.
    Phillips, I., Ulidowski, I.: Reversing algebraic process calculi. J. Log. Algebr. Program. 73(1-2) (2007)Google Scholar
  18. 18.
    Stanley, T., Close, T., Miller, M.S.: Causeway: a message-oriented distributed debugger. Technical report, HPL-2009-78 (2009),
  19. 19.
    Undo Software. Commercial reversible debugger,
  20. 20.
    Visan, A.M., et al.: Temporal debugging using urdb. CoRR, abs/0910.5046 (2009)Google Scholar
  21. 21.
    Xu, G., Rountev, A., Tang, Y., Qin, F.: Efficient checkpointing of java software using context-sensitive capture and replay. In: ESEC/SIGSOFT FSE 2007, pp. 85–94. ACM (2007)Google Scholar
  22. 22.
    Zelkowitz, M.V.: Reversible execution. Commun. ACM 16(9), 566 (1973)CrossRefGoogle Scholar
  23. 23.
    Zhang, X., Tallam, S., Gupta, R.: Dynamic slicing long running programs through execution fast forwarding. In: SIGSOFT FSE, pp. 81–91. ACM (2006)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2014

Authors and Affiliations

  • Elena Giachino
    • 1
  • Ivan Lanese
    • 1
  • Claudio Antares Mezzina
    • 2
  1. 1.Focus Team, INRIAUniversity of BolognaItaly
  2. 2.SOA UnitFBKTrentoItaly

Personalised recommendations