A Survey of Systems for Detecting Serial Run-Time Errors The Iowa State University’s High Performance Computing Group Glenn R. Luecke, James Coyle, Jim Hoekstra, Marina Kraeva, Ying Li, Olga Taborskaia, and Yanmei Wang {grl, jjc, hoekstra, kraeva, yingli, olga, yanmei}@iastate.edu Revised February 22, 2006 Abstract: This paper evaluates the ability of a variety of commercial and non-commercial software products to detect serial run-time errors in C and C++ programs, to issue meaningful messages, and to give the line in the source code where the error occurred. The commercial products, Insure++ and Purify, evaluated did the best of all the software products we evaluated. Error messages were usually better and clearer when using Insure++ than when using Purify. Our evaluation shows that the overall capability of detecting run-time errors of the non-commercial products is significantly lower than the quality of both Purify and Insure++. Of all the non- commercial products evaluated, Mpatrol provided the best overall capability to detect run-time errors in C and C++ programs. I. Introduction Debugging applications programs can be very time consuming. However, having good software tools can greatly decrease this time. While some program errors can be found at compile time, there are other program errors than cannot be detected until run-time. We call these errors run-time errors. Observe that we assume the language syntax of the program is correct and an executable was created. For example, suppose the value of an integer variable n is not known at compile time. If n is outside the declared bounds of an array A, then an out-of-bounds memory access error will occur during run-time when the program reads A[n]. The value of n may have been read from an input file or the value of n may have been the result of a calculation not performed at compile time. The purpose of this paper is to evaluate the ability of a variety of software products to detect serial (not parallel) run-time errors, to issue meaningful messages, and to give the line in the source code where the error occurred. The language a program is written in determines the kinds of run-time errors that can occur. We limit our investigation to errors that can occur when executing serial Fortran, C, and C++ programs. However, most of the software currently available for detecting run-time errors only supports C and C++, so we only evaluated selected software products for detecting run-time errors in C and C++ programs. These selected software products were evaluated by writing a variety of C and C++ tests with run-time errors. Section II gives a list of the commonly-encountered run-time errors that occur for Fortran, C, and C++. Section III lists the software products evaluated. The evaluation was performed in two steps. First information about each software product was obtained from a variety of web sites. However, just because a web site says that a software product detects certain run-time errors, this does not mean it really does detect these run-time errors in a variety of situations nor does it mean that the software provides information that allows the user to easily locate the error. Thus, the second step was to evaluate the ability of these software products to detect run-time errors on a series of C and 1