Combining compile-time and run-time instrumentation for testing tools
Venue
Programmnye produkty i sistemy, vol. 3 (2013), pp. 224-231
Publication Year
2013
Authors
Timur Iskhodzhanov, Reid Kleckner, Evgeniy Stepanov
BibTeX
Abstract
Dynamic program analysis and testing tools typically require inserting extra
instrumentation code into the program to test. The inserted instrumentation then
gathers data about the program execution and hands it off to the analysis
algorithm. Various analysis algorithms can be used to perform CPU profiling,
processor cache simulation, memory error detection, data race detection, etc.
Usually the instrumentation is done either at run time or atcompile time – called
dynamic instrumentation and compiler instrumentation, respectively. However, each
of these methods has to make a compromise between performance and versatil-ity when
used in industry software development. This paper presents a combined approach to
instrumentationwhich takes the best of the two worlds – the low run-time overhead
and unique features of compile-time instrumentation and the flexibility of dynamic
instrumentation. Wepresent modifications of two testing tools that benefit from
thisapproach: AddressSanitizer and MemorySanitizer. We propose benchmarks to
compare different instrumentation frameworks in conditions specific to hybrid
instrumenta-tion. We discuss the changes we made to one of the state-of-the-art
instrumentation frameworks to significantly improve the performance of hybrid
tools.
