ABSTRACT
SELF's debugging system provides complete source-level debugging (expected behavior) with globally optimized code. It shields the debugger from optimizations performed by the compiler by dynamically deoptimizing code on demand. Deoptimization only affects the procedure activations that are actively being debugged; all other code runs at full speed. Deoptimization requires the compiler to supply debugging information at discrete interrupt points; the compiler can still perform extensive optimizations between interrupt points without affecting debuggability. At the same time, the inability to interrupt between interrupt points is invisible to the user. Our debugging system also handles programming changes during debugging. Again, the system provides expected behavior: it is possible to change a running program and immediately observe the effects of the change. Dynamic deoptimization transforms old compiled code (which may contain inlined copies of the old version of the changed procedure) into new versions reflecting the current source-level state. To the best of our knowledge, SELF is the first practical system providing full expected behavior with globally optimized code.
- Cha87.David Chase. Garbage Collection and Other Optimizations, Ph.D. dissertation, Computer Science Department, Rice University, 1987. Google ScholarDigital Library
- Cha92.Craig Chambers. The Design and Implementation of the SELF Compiler, an Optimizing Compiler for Object- Oriented Programming Languages. Ph.D. dissertation, Computer Science Department, Stanford University. March 1992. Google ScholarDigital Library
- CMR88.Deborah S. Coutant, Sue Meloy, and Michelle Ruscetta. DOC: A Practical Approach to Source-Level Debugging of Globally Optimized Code. in Proceedings of the SIGPLAN '88 Conference on Programming Language Design and Implementation, pp. 125-134. Google ScholarDigital Library
- CUL89.Craig Chambers, David Ungar, and Elgin Lee. An Efficient Implementation of SELF, a Dynamically-Typed Object-Oriented Language Based on Prototypes. In OOPSLA '89 Conference Proceedings, pp. 49-70, New Orleans, LA, October, 1989. Published as SIGPLAN Notices 24(10), October, 1989. Also published in Lisp and Symbolic Computation 4(3), Kluwer Academic Publishers, June, 1991. Google ScholarDigital Library
- CU90.Craig Chambers and David Ungar. Iterative Type Analysis and Extended Message Splitting' Optimizing Dynamically-Typed Object-Oriented Programs. in Proceedings of the SIGPLAN '90 Conference on Programming Language Design and Implementation, pp. 150-164, White Plains, NY, June, 1990. Published as SIGPLAN Notices 25(6), June, 1990. Also published in Lisp and Symbolic Computation 4(3), Kluwer Academic Publishers, June, 1991. Google Scholar
- CU91.Craig Chambers and David Ungar. Making Pure Object- Oriented Languages Practical. In OOPSLA '91 Conference Proceedings, pp. 1-15, Phoenix, AZ, October, 1991. Published as SIGPLAN Notices 26(11), November, 1991. Google ScholarDigital Library
- DS84.L. Peter Deutsch and Allan M. Schiffman. Efficient Implementation of the Smalltalk-80 System. In Conference Record of the Eleventh Annual ACM Symposium on Principles of Programming Languages, pp. 297-302, Salt Lake City, UT, January, 1984. Google ScholarDigital Library
- Fei83.Peter H. Feiler. A Language-Oriented Interactive Programming Environment Based on Compilation Technology. Ph.D. dissertation, Carnegie-Mellon University, 1983. Google ScholarDigital Library
- HCU91.Urs H61zle, Craig Chambers, and David Ungar. Optimizing Dynamically-Typed Object-Oriented Programming Languages with Polymorphic Inline Caches. In ECOOP '91 Conference Proceedings, pp. 21-38, Geneva, Switzerland, July, 1991. Published as Springer Verlag LNCS 512, 1991. Google ScholarDigital Library
- Hen82.John L. Hennessy. Symbolic Debugging of Optimized Code. ACM Transactions of Programming Languages and Systems 4(3), July 1982. Google ScholarDigital Library
- JGZ88.Ralph E. Johnson, Justin O. Graver, and Lawrence W. Zurawski. TS: An Optimizing Compiler for Smalltalk. In OOPSLA '88 Conference Proceedings, pp. 18-26, San Diego, CA, October, 1988. Published as SIGPLAN Notices 23(11), November, 1988. Google ScholarDigital Library
- SW78.H. Schlaeppi and H. Warren. Design of the FDS Interactive Debugging System. IBM Research Report RC7214, IBM Yorktown Heights, July 1978.Google Scholar
- TA90.Andrew P. Tolmach and Andrew W. Appel. Debugging Standard ML Without Reverse Engineering. In Proceedings of the 1990 ACM Conference on Lisp and Functional Programming, Nice, France, June 1990, pp. 1-12. Google ScholarDigital Library
- US87.David Ungar and Randall B. Smith. SELF: The Power of Simplicity. In OOPSLA '87 Conference Proceedings, pp. 227-241, Orlando, FL, October, 1987. Published{ as SIGPLAN Notices 22(12), December, 1987. Also published in Lisp and Symbolic Computation 4(3), Kluwer Academic Publishers, June, 1991. Google ScholarDigital Library
- Zel83.Polle T. Zellweger. An Interactive High-Level Debugger for Control-Flow Optimized Programs. Xerox PARC Technical Report CSL-83-1, January 1983.Google Scholar
- Zel84.Polle T. Zellweger. Interactive Source-Level DebuggJ!ng of Optimized Programs. Ph.D. dissertation, Computer Science Department, University of California, Berkeley, 1984. Also published as Xerox PARC Technical Report CSL-84-5, May 1984. Google ScholarDigital Library
- ZJ91.Lawrence W. Zurawski and Ralph E. Johnson. Debugging Optimized Code With Expected Behavior. Unpublished manuscript, 1991.Google Scholar
Index Terms
- Debugging optimized code with dynamic deoptimization
Recommendations
One compiler: deoptimization to optimized code
CC 2017: Proceedings of the 26th International Conference on Compiler ConstructionA multi-tier virtual machine (VM) deoptimizes and transfers last-tier execution to the first-tier execution when a speculative optimization is invalidated. The first-tier target of deoptimization is either an interpreter or code compiled by a baseline ...
Debugging optimized code with dynamic deoptimization
SELF's debugging system provides complete source-level debugging (expected behavior) with globally optimized code. It shields the debugger from optimizations performed by the compiler by dynamically deoptimizing code on demand. Deoptimization only ...
Comments