This Article 
 Bibliographic References 
 Add to: 
Reversible Debugging Using Program Instrumentation
August 2001 (vol. 27 no. 8)
pp. 715-727

Abstract—Reversible execution has not been fully exploited in symbolic debuggers. Debuggers that can undo instructions usually incur a significant performance penalty during a debugging session. In this paper, we describe an efficient reversible debugging mechanism based on program instrumentation. The approach enables repetitive debugging sessions with selectable reversible routines and recording modes. Experimental results indicate that the execution penalty can be significantly reduced with moderate code growth.

[1] M.V. Zelkowitz, “Reversible Execution,” Comm. ACM, vol. 16, no. 9, p. 566, Sept. 1973.
[2] G.B. Leeman Jr., “A Formal Approach to Undo Operations in Programming Languages,” ACM Trans. Programming Languages and Systems, vol. 8, no. 1, pp. 50–87, Jan. 1986.
[3] J.S. Vitter, “US&R: A New Framework for Redoing,” Proc. ACM SIGSOFT/SIGPLAN Software Eng. Symp. Practical Software Development Environments 19, pp. 168–176, Apr. 1984.
[4] G.B. Leeman Jr., “Building Undo/Redo Operations into the C Programming Language,” Proc. 15th Int'l Symp. Fault-Tolerant Computing, pp. 410–415, 1985.
[5] J.E. Archer Jr., R. Conway, and F.B. Schneider, “User Recovery and Reversal in Interactive Systems,” ACM Trans. Programming Languages and Systems, vol. 6, no. 1, pp. 1–19, Jan. 1984.
[6] R.M. Balzer, “EXDAMS—Extendable Debugging and Monitoring System,” Proc. Spring Joint Computer Conf., pp. 567–580, 1969.
[7] S.I. Feldman and C.B. Brown, “IGOR: A System for Program Debugging via Reversible Execution,” Proc. SIGPLAN Notice, pp. 112–123, Jan. 1989.
[8] A. Tolmach and A. Appel, “A Debugger for Standard ML,” J. Functional Programming, vol. 5, no. 2, pp. 155–200, April 1995.
[9] T. Moher, “PROVIDE: A Process Visualization and Debugging Environment,” IEEE Trans. Software Eng., vol. 14, no. 6, pp. 849–857, June 1988.
[10] M.S. Johnson, “Some Requirements for Architectural Support of Software Debugging,” Proc. SIGPLAN Notice, pp. 140–148, Mar. 1982.
[11] C.B. Stunkel and W.K. Fuchs, “TRAPEDS—Producing Traces for Multicomputers via Execution-Driven Simulation,” Proc. ACM SIGMetrics Int'l Conf. Measurement and Modeling of Computer Systems, pp. 70–78, 1989.
[12] S.J. Eggers, D.R. Keppel, E.J. Koldinger, and H.M. Levy, “Techniques for Efficient In-Line Tracing on a Shared-Memory Multiprocessor,” Proc. ACM SIGMetrics Int'l Conf. Measurement and Modeling of Computer Systems, pp. 37–47, 1990.
[13] J.R. Larus and T. Ball, “Rewriting Executable Files to Measure Program Behavior,” Software—Practice and Experience, vol. 24, no. 2, pp. 197–218, Feb. 1994.
[14] T. Ball and J.R. Larus, “Optimally Profiling and Tracing Programs,” ACM Trans. Programming Languages and Systems, vol. 16, no. 4, pp. 1319–1360, July 1994.
[15] M. Ronsse and K. Bosschere, “RecPlay: A Fully Integrated Practical Record/Replay System,” ACM Trans. Computer Systems, vol. 17, no. 2, pp. 133–152, May 1999.
[16] J.L. Hennessy, “Symbolic Debugging of Optimized Code,” ACM Trans. Programming Languages and Systems, vol. 4, no. 3, pp. 323–344, July 1982.
[17] D. Wall, A. Srivastava, and R. Templin, “A Note on Hennessy's Symbolic Debugging of Optimized Code,” ACM Trans. Programming Languages and Systems, vol. 7, no. 1, pp. 176–181, Jan. 1985.
[18] M. Copperman and C.E. McDowell, “A Further Note on Hennessy's Symbolic Debugging of Optimized Code,” ACM Trans. Programming Languages and Systems, vol. 15, no. 2, pp. 357–365, Apr. 1993.
[19] M. Copperman, “Debugging Optimized Code Without Being Misled,” ACM Trans. Programming Languages and Systems, vol. 16, no. 3, pp. 387–427, May 1994.
[20] E.H. Satterthwaite Jr., “Debugging Tools for High-Level Languages,” Software—Practice and Experience, vol. 2, no. 3, pp. 197–217, July 1972.
[21] R. Ward, Debugging C. Que Corporation, 1986.
[22] M. Ducasse, “Coca: An Automated Debugger for C,” Proc. 21st Int'l Conf. Software Eng., pp. 504–513, May 1999.
[23] P. Fritzson, M. Auguston, and N. Shahmehri, “Using Assertions in Declarative and Operational Models for Automated Debugging,” J. Systems Software, vol. 25, pp. 223–239, 1994.
[24] R.E. Fairley, “ALADDIN: Assembly Language Assertion Driven Debugging Interpreter,” IEEE Trans. Software Eng., vol. 5, no. 4, pp. 426–428, July 1979.
[25] J. Cohen and N. Carpenter, “A Language for Inquiring About the Runtime Behaviour of Programs,” Software Practice and Experience, vol. 7, pp. 445–460, 1977.
[26] Mercury Interactive Corp., “WinRunner 6—Powerful Test Automation for the Enterprise,” productswinrunner6.
[27] A.V. Aho, R. Sethi, and J.D. Ullman, Compilers, Principles, Techniques and Tools.New York: Addison-Wesley, 1985.
[28] T.H. Cormen,C.E. Leiserson, and R.L. Rivest,Introduction to Algorithms.Cambridge, Mass.: MIT Press/McGraw-Hill, 1990.
[29] P. Chang, W. Chen, N. Warter, and W.-M.W. Hwu, “IMPACT: An Architecture Framework for Multiple-Instruction-Issue Processors,” Proc. 18th Ann. Int'l Symp. Computer Architecture, pp. 266–275, May 1991.
[30] H. Agrawal, R. deMillo, and E. Spafford, “An Execution-Backtracking Approach to Debugging,” IEEE Software, pp. 21–26, May 1991.
[31] H. Lieberman and C. Fry, “Bridging the Gulf between Code and Behavior in Programming,” Proc. ACM CHI'95 Conf. Human Factors in Computing Systems, pp. 480–486, 1995.
[32] R.A. Olsson, R.H. Crawford, W.W. Ho, and C.E. Wee, “Sequential Debugging at a High Level of Abstraction,” IEEE Software, pp. 27–36, May 1991.
[33] P. Winterbottom, “Acid: A Debugger Built from a Language,” Proc. Winter USENIX Technical Conf., pp. 211–222, Jan. 1994.
[34] M. Golan and D. Hanson, “DUEL—A Very High-Level Debugging Language,” Winter USENIX Technical Conf., pp. 107–117, Jan. 1993.
[35] T.J. LeBlanc and J.M. Mellor-Crummey, "Debugging Parallel Programs with Instant Replay," IEEE Trans. Computers, vol. 36, no. 4, pp. 471-482, Apr. 1987.

Index Terms:
Debuggers, reversible execution, program instrumentation, compilers, assembly language.
Shyh-Kwei Chen, W. Kent Fuchs, Jen-Yao Chung, "Reversible Debugging Using Program Instrumentation," IEEE Transactions on Software Engineering, vol. 27, no. 8, pp. 715-727, Aug. 2001, doi:10.1109/32.940726
Usage of this product signifies your acceptance of the Terms of Use.