一句话:通过对比优化与未优化程序的动态调用树,系统分类调试信息缺陷并归因于编译器或格式。
调试工具依赖编译器生成的元数据来呈现源码级视图,但现代编译器在优化程序中常丢弃或破坏调试信息。已有测试方法受限于调试信息格式的临时性缺陷,且难以判断信息丢失应归咎于编译器还是格式本身。本文采用调试信息的“残留程序”(residual program)概念视角,研究调试信息在恢复源码级动态调用树方面的质量。作者对比同一程序在优化与未优化版本下恢复出的调用树,对观察到的偏差进行分类,逐类分析责任归属并给出具体修复途径,最后在更大的知名代码库集合上验证该分类。
Debugging tools rely on compiler-generated metadata to present a source-language view, but current compilers often throw away or corrupt debugging information in optimised programs. Attempts to test debugging information are confounded by ad-hoc limitations of the debug info formats and a lack of clarity on whether the compiler or the format is to blame for any given loss. Adopting the “residual program” conceptual view of debug info, we conduct a study of the quality of debugging information in respect of the source-level dynamic call trees it can recover. We compare the trees recovered from optimised and unoptimised versions of the same program, producing a classification of the observed divergences. For each class, we analyse whether format or compiler is to blame and identify specific ways to address these defects. We also validate our classification across a larger collection of well-known codebases.
@article{paperbot3829,
title = {Debugging Debugging Information using Dynamic Call Trees},
author = {J. Ryan Stinnett and Stephen Kell},
journal = {Proceedings of the ACM on Programming Languages},
volume = {10},
number = {OOPSLA1},
year = {2026},
doi = {10.1145/3798213}
}