Debug information validation for optimized code
Autor: | Yuanbo Li, Davide Italiano, Shuo Ding, Qirun Zhang |
---|---|
Rok vydání: | 2020 |
Předmět: |
Source code
010308 nuclear & particles physics Programming language Computer science business.industry media_common.quotation_subject 020207 software engineering 02 engineering and technology Program optimization computer.software_genre 01 natural sciences Variable (computer science) Software Debugging 0103 physical sciences 0202 electrical engineering electronic engineering information engineering Compiler business computer media_common Rust (programming language) computer.programming_language Debugger |
Zdroj: | PLDI |
DOI: | 10.1145/3385412.3386020 |
Popis: | Almost all modern production software is compiled with optimization. Debugging optimized code is a desirable functionality. For example, developers usually perform post-mortem debugging on the coredumps produced by software crashes. Designing reliable debugging techniques for optimized code has been well-studied in the past. However, little is known about the correctness of the debug information generated by optimizing compilers when debugging optimized code. Optimizing compilers emit debug information (e.g., DWARF information) to support source code debuggers. Wrong debug information causes debuggers to either crash or to display wrong variable values. Existing debugger validation techniques only focus on testing the interactive aspect of debuggers for dynamic languages (i.e., with unoptimized code). Validating debug information for optimized code raises some unique challenges: (1) many breakpoints cannot be reached by debuggers due to code optimization; and (2) inspecting some arbitrary variables such as uninitialized variables introduces undefined behaviors. This paper presents the first generic framework for systematically testing debug information with optimized code. We introduce a novel concept called actionable program. An actionable program P⟨ s, v⟩ contains a program location s and a variable v to inspect. Our key insight is that in both the unoptimized program P⟨ s,v⟩ and the optimized program P⟨ s,v⟩′, debuggers should be able to stop at the program location s and inspect the value of the variable v without any undefined behaviors. Our framework generates actionable programs and does systematic testing by comparing the debugger output of P⟨ s, v⟩′ and the actual value of v at line s in P⟨ s, v⟩. We have applied our framework to two mainstream optimizing C compilers (i.e., GCC and LLVM). Our framework has led to 47 confirmed bug reports, 11 of which have already been fixed. Moreover, in three days, our technique has found 2 confirmed bugs in the Rust compiler. The results have demonstrated the effectiveness and generality of our framework. |
Databáze: | OpenAIRE |
Externí odkaz: |