Debugging optimized code with dynamic deoptimization

Debugging optimized code with dynamic deoptimization
复制标题

DOI:
10.1145/143095.143114
复制
发表时间:
1992-07
期刊:
--
影响因子:
--
通讯作者:
Urs Hölzle;C. Chambers;D. Ungar
Urs Hölzle;C. Chambers;D. Ungar
中科院分区:
其他
文献类型:
--
作者:
Urs Hölzle;C. Chambers;D. Ungar

文献摘要

被引文献

相似文献

Self的调试系统通过全球优化的代码提供完整的源级调试(预期行为)。它通过动态消除代码按需进行DEOPTIMEDIMEDIMED,将调试器免受编译器执行的优化。 Deoptimization仅影响积极调试的程序激活。所有其他代码均全速运行。 Deoptimization要求编译器以离散的中断点提供调试信息;编译器仍然可以在中断点之间进行广泛的优化,而不会影响辩论性。同时,用户看不见中断点之间的中断。我们的调试系统还处理调试期间的编程更改。同样,系统提供了预期的行为:可以更改运行程序并立即观察变化的影响。动态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 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.