Runtime Error Checking for Novice C Programmers

Total Page:16

File Type:pdf, Size:1020Kb

Runtime Error Checking for Novice C Programmers Runtime error checking for novice C programmers Matthew Heinsen Egan Chris McDonald Computer Science and Software Engineering Computer Science and Software Engineering University of Western Australia University of Western Australia Crawley, WA 6009, Australia Crawley, WA 6009, Australia [email protected] [email protected] ABSTRACT The standard C programming language can be especially Debugging is a source of great frustration for most novice difficult for newcomers. In particular, pointers and manual programmers. Standard and professional debugging tools memory management can present difficulties both in under- are unsuitable for novice programmers, because they are standing at a conceptual level, and in debugging the la- overly complex and do not provide the basic information conically described runtime errors which result from their that novices frequently require. We describe an ongoing misuse. Most newly developed novice-focused debugging project to design, build, and evaluate novice-focused de- systems are designed for object-oriented programming lan- bugging tools supporting the standard C programming lan- guages, as introductory teaching has focused on these lan- guage. In particular, our focus is on detecting, reporting, guages, and the most notable tools developed to assist novice and reviewing the typical runtime errors that confuse and C programmers are predominately unmaintained. frustrate student programmers { accesses to invalid memory, Research from the fields of programming languages and reading from uninitialized memory, and C's often \defined to compilers has developed many advanced debugging tech- be undefined" behaviour. In addition, our tool features in- niques, but they are typically only supported by tools de- tegrated execution tracing so that students receive not only signed for expert programmers, rather than for novices. The very informative error reporting, but the ability to replay complexity of these tools, and the time required to learn the entire history of their program leading to that error. their use, at even a modest level, are often insurmount- able hurdles for novice students. Furthermore, while these tools can be used to locate runtime errors, they do not assist Categories and Subject Descriptors novice programmers to understand those errors. D.2.5 [Software Engineering]: Testing and Debugging; In this paper we describe our ongoing project to design, K.3.2 [Computers and Education]: Computer and In- develop, and evaluate novice-focused debugging tools for the formation Science Education C programming language. We discuss the design and imple- mentation of our prototype tool, SeeC (pronounced 'seek'), General Terms and evaluate its error detection and reporting using a large sample of project submissions from undergraduate students. Human Factors SeeC is designed to assist novice programmers by automat- ically recording the execution of their programs, detecting Keywords runtime errors, and allowing review of the execution in a Novice programmers, debuggers simple graphical environment. The approach taken is that the execution of novices' programs is always being recorded, 1. INTRODUCTION so that execution may always be reviewed, in preference to re-running a program which may only fail intermittently. Debugging can be troublesome for novice programmers as Section 2 discusses the C programming language and the it requires the simultaneous application of a wide range of difficulties that it presents to students and educators. Sec- knowledge, which novice programmers are yet to acquire. tion 3 discusses novice programmers' difficulties with debug- If a novice programmer does not have the necessary knowl- ging, and describes the framework that we follow to evaluate edge to debug their program then the debugging process and design debugging systems. Section 4 considers existing may consume large amounts of their time, prevent them debugging tools for both novice and expert programmers. from completing assigned tasks, and ultimately contribute Section 5 discusses the implementation requirements of our to decisions to withdraw from programming courses. proposed debugging system. Section 6 discusses our use of the LLVM compiler infrastructure to implement execution tracing. Section 7 discusses our implementation of runtime error detection. Section 8 discusses our use of the Clang project to acquire precise information about the syntactic and semantic structure of students' C source code. Sec- tion 9 compares SeeC's error detection and reporting to that of Memcheck, the well-known Valgrind tool. We finally sum- 4th Annual International Conference on Computer Science Education: In- marize our discussion and highlight future plans. novation and Technology (CSEIT 2013) 2. ON TEACHING C 3. THE DEBUGGING FRAMEWORK For many years C has been one of the most widely-used Anecdotal reports often indicate that debugging is dif- programming languages. A great number of projects are ficult for novice programmers. Many formal studies have implemented in C, from operating system kernels to end- investigated the nature of the debugging process for both user programs, and it has influenced several other popu- expert programmers and novice programmers, and show the lar languages, such as C++, Objective C, Java, and C#. kind of unique difficulties that novices experience, and how Despite C's age, the growing importance of embedded and detrimental they can be to a novice's progress. sensor-based systems has cemented C's significance in mod- Sepp¨al¨a reported that a questionnaire given to students ern computing. Gaspar et al. reported on the results of who were studying Java in their main programming course an anonymous online survey designed to determine the role found that \43 percent of the students claimed that they of the C language in the modern computing curricula [11]. spent most of their time trying to make their programs con- The survey found that while respondents used C in only 14% form to exercise specifications or trying to fix runtime er- of introductory courses and 10.9% of intermediate courses, rors" [27]. 67% use C in other courses { primarily Operating systems Ko and Myers presented a framework for studying soft- and Networking: ware errors [16] which we have used to evaluate the design of existing debugging tools, and to guide the design of our pro- \. the very aspects of C which are perceived as totype debugging tool. This framework is based on studies a pedagogical hindrance in introductory courses of programming and debugging, and general research on hu- can be useful to provide a more in-depth under- man error. The framework defines the correctness of a pro- standing of programming at later stages of stu- gram relative to the program's design specifications, which dent education." [11] define the system's behavioural and functional requirements. The framework defines three terms for describing runtime Lee et al. noted that moving to a Java-based introduc- errors: tory sequence \created a gap in knowledge as the students Runtime failures occur when a program's behaviour does progress to upper level courses like operating systems and not comply with its design specifications, e.g. it pro- computer graphics, where they need a command of C and duces incorrect output or crashes. the UNIX environment" [22]. Desnoyers noted that many students had no previous exposure to an unsafe language Runtime faults exist when a program's runtime state may when first encountering C in an operating systems course [7]. lead to a runtime failure, e.g. when an incorrect value Moreover, the number of potential topics in any Computer has been calculated, or a piece of code has been inap- Science curriculum often means that the C programming propriately executed. language can no longer be explicitly taught in some degrees, and students must study it at their own pace to attain the Software errors are any pieces of code that may cause a knowledge assumed for later courses. runtime fault during the program's execution. Students learning the C programming language are often experiencing their first introduction to pointers and man- Note that software errors may lie dormant until circum- ual memory management. Many studies have noted that stances cause them to manifest a runtime fault, and similarly students encounter difficulty while learning to use pointers that a runtime fault will not necessarily produce a runtime and manual memory management. Lahtinen et al. surveyed failure. However, the presence of a runtime failure guar- students and teachers, and found that on average pointers antees that at least one runtime fault exists, which in turn and references were rated the most difficult programming guarantees that at least one software error exists. concepts to learn [19]. Brusilovsky et al. surveyed computer Within this framework, we can consider the debugging science educators, and found that pointers were the most fre- process as follows: after a programmer becomes aware of a quent response for difficult to learn concepts, and the second runtime failure, they must locate the software errors respon- most frequent response for difficult to teach concepts [2]. sible and correct them. This often involves the intermediate Students at The University of Western Australia are in- task of finding the runtime faults responsible for the ob- troduced to C in a first year course covering core aspects of served runtime failure. When the programmer has located a procedural programming language and their relationship the runtime faults, they use their knowledge to identify the to core operating systems concepts. The course is part of software errors responsible, and then to correct those errors. the required sequence for traditional Computer Science stu- Ducass´eand Emde identified seven kinds of knowledge dents, who later apply their knowledge in networking and necessary for debugging [9], namely knowledge of: the in- security courses, but is also taken by many Electronic Engi- tended program; the actual program; the programming lan- neering students who later apply their knowledge in courses guage; bugs; debugging methods; general programming ex- on embedded systems and robotics. pertise; and the application domain.
Recommended publications
  • HALO: Post-Link Heap-Layout Optimisation
    HALO: Post-Link Heap-Layout Optimisation Joe Savage Timothy M. Jones University of Cambridge, UK University of Cambridge, UK [email protected] [email protected] Abstract 1 Introduction Today, general-purpose memory allocators dominate the As the gap between memory and processor speeds continues landscape of dynamic memory management. While these so- to widen, efficient cache utilisation is more important than lutions can provide reasonably good behaviour across a wide ever. While compilers have long employed techniques like range of workloads, it is an unfortunate reality that their basic-block reordering, loop fission and tiling, and intelligent behaviour for any particular workload can be highly subop- register allocation to improve the cache behaviour of pro- timal. By catering primarily to average and worst-case usage grams, the layout of dynamically allocated memory remains patterns, these allocators deny programs the advantages of largely beyond the reach of static tools. domain-specific optimisations, and thus may inadvertently Today, when a C++ program calls new, or a C program place data in a manner that hinders performance, generating malloc, its request is satisfied by a general-purpose allocator unnecessary cache misses and load stalls. with no intimate knowledge of what the program does or To help alleviate these issues, we propose HALO: a post- how its data objects are used. Allocations are made through link profile-guided optimisation tool that can improve the fixed, lifeless interfaces, and fulfilled by
    [Show full text]
  • Architectural Support for Scripting Languages
    Architectural Support for Scripting Languages By Dibakar Gope A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy (Electrical and Computer Engineering) at the UNIVERSITY OF WISCONSIN–MADISON 2017 Date of final oral examination: 6/7/2017 The dissertation is approved by the following members of the Final Oral Committee: Mikko H. Lipasti, Professor, Electrical and Computer Engineering Gurindar S. Sohi, Professor, Computer Sciences Parameswaran Ramanathan, Professor, Electrical and Computer Engineering Jing Li, Assistant Professor, Electrical and Computer Engineering Aws Albarghouthi, Assistant Professor, Computer Sciences © Copyright by Dibakar Gope 2017 All Rights Reserved i This thesis is dedicated to my parents, Monoranjan Gope and Sati Gope. ii acknowledgments First and foremost, I would like to thank my parents, Sri Monoranjan Gope, and Smt. Sati Gope for their unwavering support and encouragement throughout my doctoral studies which I believe to be the single most important contribution towards achieving my goal of receiving a Ph.D. Second, I would like to express my deepest gratitude to my advisor Prof. Mikko Lipasti for his mentorship and continuous support throughout the course of my graduate studies. I am extremely grateful to him for guiding me with such dedication and consideration and never failing to pay attention to any details of my work. His insights, encouragement, and overall optimism have been instrumental in organizing my otherwise vague ideas into some meaningful contributions in this thesis. This thesis would never have been accomplished without his technical and editorial advice. I find myself fortunate to have met and had the opportunity to work with such an all-around nice person in addition to being a great professor.
    [Show full text]
  • Runtime Detection of C-Style Errors in UPC Code
    Runtime Detection of C-Style Errors in UPC Code Peter Pirkelbauer Chunhua Liao Thomas Panas Lawrence Livermore National Lawrence Livermore National Microsoft Laboratory Laboratory Parallel Data Warehousing [email protected] [email protected] [email protected] Dan Quinlan Lawrence Livermore National Laboratory [email protected] Abstract Software frequently contains flaws, and the size and complexity Unified Parallel C (UPC) extends the C programming language of modern software makes the detection of such flaws difficult. Re- (ISO C 99) with explicit parallel programming support for the parti- ducing the number of software flaws is an effort that permeates tioned global address space (PGAS), which provides a global mem- all stages in software development. For example, adopting rigid ory space with localized partitions to each thread. Like its ancestor coding standards and restricting programming languages to a safe C, UPC is a low-level language that emphasizes code efficiency. subset can eliminate error-prone coding techniques. Static and dy- The absence of dynamic (and static) safety checks allows program- namic code analysis tools that operate on source or binary code mer oversights and software flaws that can be hard to spot. are also used to reduce software flaws. Static analysis tools uti- In this paper, we present an extension of a dynamic analysis lize source code (style) analysis or formal analysis techniques such tool, ROSE-Code Instrumentation and Runtime Monitor (ROSE- as dataflow analysis, abstract interpretation, and model checking. CIRM), for UPC to help programmers find C-style errors involving Static analysis tools do not influence the running programs but of- the global address space.
    [Show full text]
  • Wind River® Vxworks® 7 Third Party License Notices
    Wind River® VxWorks® 7 Third Party License Notices This document contains third party intellectual property (IP) notices for the BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY Wind River® VxWorks® 7 distribution. Certain licenses and license notices THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, may appear in other parts of the product distribution in accordance with the OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN license requirements. ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Trademarks All company, product and service names used in this software are for ACPICA identification purposes only. Version: 20170303 Component(s): Runtime Wind River and VxWorks are registered trademarks of Wind River Systems. Description: Provides code to implement ACPI specification in VxWorks. UNIX is a registered trademark of The Open Group. IBM and Bluemix are registered trademarks of the IBM Corporation. NOTICES: All other third-party trademarks are the property of their respective owners. 1. Copyright Notice Some or all of this work - Copyright (c) 1999 - 2016, Intel Corp. All rights reserved. Third Party Notices 2. License 2.1. This is your license from Intel Corp. under its intellectual property rights. You may have additional license terms from the party that provided you this software, covering your right to use that party's intellectual property rights. 64-Bit Dynamic Linker Version: 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a copy Component(s): Runtime of the source code appearing in this file ("Covered Code") an irrevocable, Description: The dynamic linker is used to load shared libraries.
    [Show full text]
  • Matrox Imaging Library (MIL) 10.0 MIL 10 Processing Pack 3 Release Notes (C) Copyright Matrox Electronic Systems Ltd., 1992-2018
    ------------------------------------------------------------------------------- Matrox Imaging Library (MIL) 10.0 MIL 10 Processing Pack 3 Release Notes (c) Copyright Matrox Electronic Systems Ltd., 1992-2018. ------------------------------------------------------------------------------- Main table of contents Section 1 : Differences between MIL 10 Processing Pack 3 and MIL 10 Processing Pack 2 with Update 63 Section 2 : Differences between MIL 10 Processing Pack 2 with Update 63 and MIL 10 Processing Pack 2 Section 3 : Differences between MIL 10 Processing Pack 2 and MIL 10 Processing Pack 1 Section 4 : Differences between MIL 10 Processing Pack 1 and MIL 10 Section 5 : Differences between MIL 10 and MIL 9 Processing Pack 2 with Update 56 Section 6 : Differences between MIL 9 Processing Pack 2 with Update 56 and MIL 9 Processing Pack 2 Section 7 : Differences between MIL 9 Processing Pack 2 with Update 45 and MIL 9 Processing Pack 2 Section 8 : Differences between MIL 9 Processing Pack 2 and MIL 9 Processing Pack 1 Section 9 : Differences between MIL 9 Processing Pack 1 and MIL 9 Section 10 : Differences between MIL 9 and MIL 8 Processing Pack 4 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Section 1: Differences between MIL 10 Processing Pack 3 and MIL 10 Processing Pack 2 with with Update 63 Table of Contents for Section 1 1. Overview 2. New functionalities and improvements 2.01 MIL processing specific examples 2.02 Classification module 2.03 Blob module 2.04 Calibration module 2.05 SureDotOCR® module 2.06 Registration module 2.07 Pattern Matching module 2.08 Model Finder module 2.09 Metrology module 2.10 3dMap module 2.11 Code Reader module 2.12 Measurement module 2.13 String Reader module 2.14 Color module 2.15 Primitives 2.16 Graphics 2.17 General 3.
    [Show full text]
  • DETECTING BUFFER OVERFLOWS USING TESTCASE SYNTHESIS and CODE INSTRUMENTATION by MICHAEL A
    DETECTING BUFFER OVERFLOWS USING TESTCASE SYNTHESIS AND CODE INSTRUMENTATION by MICHAEL A. ZHIVICH S.B., Electrical Engineering and Computer Science (2004) Massachusetts Institute of Technology SUBMITTED TO THE DEPARTMENT OF ELECTRICAL ENGINEERING AND COMPUTER SCIENCE IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF ENGINEERING IN ELECTRICAL ENGINEERING AND COMPUTER SCIENCE at the MASSACHUSETTS INSTITUTE OF TECHNOLOGY June 2005 c Massachusetts Institute of Technology 2005. All rights reserved. Author............................................................................ Department of Electrical Engineering and Computer Science May 19, 2005 Certified by........................................................................ Richard Lippmann Senior Scientist, MIT Lincoln Laboratory Thesis Supervisor Accepted by....................................................................... Arthur C. Smith Chairman, Department Committee on Graduate Students 2 Detecting Buffer Overflows Using Testcase Synthesis and Code Instrumentation by Michael A. Zhivich Submitted to the Department of Electrical Engineering and Computer Science on May 19, 2005, in partial fulfillment of the requirements for the degree of Master of Engineering in Electrical Engineering and Computer Science Abstract The research presented in this thesis aims to improve existing approaches to dynamic buffer overflow detection by developing a system that utilizes code instrumentation and adap- tive test case synthesis to find buffer overflows and corresponding failure-inducing
    [Show full text]
  • C/C++ Runtime Error Detection Using Source Code Instrumentation
    FRIEDRICH-ALEXANDER-UNIVERSITAT¨ ERLANGEN-NURNBERG¨ INSTITUT FUR¨ INFORMATIK (MATHEMATISCHE MASCHINEN UND DATENVERARBEITUNG) Lehrstuhl f¨urInformatik 10 (Systemsimulation) C/C++ Runtime Error Detection Using Source Code Instrumentation Martin Bauer Bachelor Thesis C/C++ Runtime Error Detection Using Source Code Instrumentation Martin Bauer Bachelor Thesis Aufgabensteller: Prof. Dr. U. R¨ude Betreuer: M.Sc. K. Iglberger Dr. T. Panas Bearbeitungszeitraum: 01.10.2009 - 19.3.2010 Erkl¨arung: Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als der angegebenen Quellen angefertigt habe und dass die Arbeit in gleicher oder ¨ahnlicher Form noch keiner anderen Prufungsbeh¨ ¨orde vorgelegen hat und von dieser als Teil einer Prufungs-¨ leistung angenommen wurde. Alle Ausfuhrungen,¨ die w¨ortlich oder sinngem¨aß ubernommen¨ wurden, sind als solche gekennzeichnet. Erlangen, den 19. M¨arz 2010 . Abstract The detection and removal of software errors is an expensive component of the total software development cost. Especially hard to remove errors are those which occur during the execution of a program, so called runtime errors. Therefore tools are needed to detect these errors reliably and give the programmer a good hint how to fix the problem. In the first part of the thesis different types of runtime errors, which can occur in C/C++ are explored, and methods are shown how to detect them. The goal of this thesis is to present an implementation of a system which detects runtime errors using source code instrumentation. and to compare it to common binary instrumentation tools. First the ROSE source-to-source compiler is introduced which is used to do the instrumentation.
    [Show full text]
  • Residual Investigation: Predictive and Precise Bug Detection
    Residual Investigation: Predictive and Precise Bug Detection Kaituo Li, Christoph Csallner Yannis Smaragdakis ∗ Department of Computer Dept. of Informatics, Christoph Reichenbach Science and Engineering U. of Athens Computer Science Dept. University of Texas at Athens 15784, Greece University of Massachusetts Arlington, and Comp. Sci., Amherst, MA 01003, USA [email protected], Arlington, TX 76019, USA U. Massachusetts [email protected] Amherst, MA 01003, USA [email protected] [email protected] ABSTRACT 1. INTRODUCTION AND MOTIVATION We introduce the concept of “residual investigation” for program False error reports are the bane of automatic bug detection—this analysis. A residual investigation is a dynamic check installed as a experience is perhaps the most often-reported in the program anal- result of running a static analysis that reports a possible program er- ysis research literature [1, 21, 22, 27, 28]. Programmers are quickly ror. The purpose is to observe conditions that indicate whether the frustrated and much less likely to trust an automatic tool if they statically predicted program fault is likely to be realizable and rel- observe that reported errors are often not real errors, or are largely evant. The key feature of a residual investigation is that it has to be irrelevant in the given context. This is in contrast to error detection much more precise (i.e., with fewer false warnings) than the static at early stages of program development, where guarantees of de- analysis alone, yet significantly more general (i.e., reporting more tecting all errors of a certain class (e.g., type soundness guarantees) errors) than the dynamic tests in the program’s test suite pertinent are desirable.
    [Show full text]
  • Automatic Techniques to Systematically Discover New Heap Exploitation Primitives
    Automatic Techniques to Systematically Discover New Heap Exploitation Primitives Insu Yun† Dhaval Kapil‡ Taesoo Kim† † Georgia Institute of Technology ‡ Facebook Abstract Target programs Before ASLR After ASLR 02-04 05-07 Total 08-10 11-13 14-16 17-19 Total Exploitation techniques to abuse metadata of heap allocators Scriptable 0 12 12 13 29 11 4 57 Non-scriptable 9 7 16 5 1 3 2 11 have been widely studied because of their generality (i.e., (via heap exploit techs) 12 12 24 3 4 1 2 10 application independence) and powerfulness (i.e., bypassing Scriptable: Software accepting a script language modern mitigation). However, such techniques are commonly (e.g., web browsers or PDF readers). considered arts, and thus the ways to discover them remain Table 1: The number of exploitations that lead to code execu- ad-hoc, manual, and allocator-specific. tion from heap vulnerabilities in exploit-db [50]. A heap exploit In this paper, we present an automatic tool, ARCHEAP, technique is one of the popular methods used to compromise non- to systematically discover the unexplored heap exploita- scriptable programs—bugs in scriptable programs typically allow tion primitives, regardless of their underlying implementa- much easier, simpler way for exploitation, requiring no use of the tions. The key idea of ARCHEAP is to let the computer au- heap exploitation technique. tonomously explore the spaces, similar in concept to fuzzing, by specifying a set of common designs of modern heap allo- application internals. Second, heap vulnerabilities are typi- cators and root causes of vulnerabilities as models, and by cally so powerful that attackers can bypass modern mitigation providing heap operations and attack capabilities as actions.
    [Show full text]
  • How to Keep Your Head Above Water While Detecting Errors
    How To Keep Your Head Above Water While Detecting Errors Ignacio Laguna, Fahad A. Arshad, David M. Grothe, Saurabh Bagchi Dependable Computing Systems Lab (DCSL) School of Electrical and Computer Engineering, Purdue University {ilaguna, faarshad, dgrothe, sbagchi}@purdue.edu Abstract. Today’s distributed systems need runtime error detection to catch errors arising from software bugs, hardware errors, or unexpected operating conditions. A prominent class of error detection techniques operates in a stateful manner, i.e., it keeps track of the state of the application being monitored and then matches state-based rules. Large-scale distributed applications generate a high volume of messages that can overwhelm the capacity of a stateful detection system. An existing approach to handle this is to randomly sample the messages and process a subset. However, this approach, leads to non-determinism with respect to the detection system’s view of what state the application is in. This in turn leads to degradation in the quality of detection. We present an intelligent sampling algorithm and a Hidden Markov Model (HMM)-based algorithm to select the messages that the detection system processes and determine the application states such that the non-determinism is minimized. We also present a mechanism for selectively triggering computationally intensive rules based on a light-weight mechanism to determine if the rule is likely to be flagged. We demonstrate the techniques in a detection system called Monitor applied to a J2EE multi-tier application. We empirically evaluate the performance of Monitor under different load conditions and error scenarios and compare it to a previous system called Pinpoint.
    [Show full text]
  • Errors Detected Multiple Use Modes
    Insure++ is a runtime memory analysis and error detection tool for C and C++ that automatically identifies a variety of difficult-to-track programming and memory-access errors, along with potential defects and inefficiencies in memory usage. Errors such as memory corruption, memory leaks, access outside of array bounds, invalid pointers, and the like often go undetected during normal testing, only to result in application crashes in the field. Insure++ will help you find and eliminate such defects in your applications to ensure the integrity of their memory usage. Errors Detected During testing, Insure++ checks all types of memory references, including those to static (global), stack, and shared memory — both in user’s code and in third party libraries. Errors that Insure++ detects include: Corrupted heap and stack memory Use of uninitialized variables and objects Array and string bounds errors on heap and stack Use of dangling, NULL, and uninitialized pointers All types of memory allocation and free errors or mismatches All types of memory leaks Type mismatches in global declarations, pointers, and function calls Some varieties of dead code (compile-time) Multiple Use Modes Insure++ has highly detailed memory analysis capabilities that are based on patented* source instrumentation algorithms. Source code instrumentation enables Insure++ to detect more error types than other memory error detection technologies, and also provides complete information indicating the root causes of the errors found, using a full database of program elements and memory structures. There are two ways to use Insure++ for memory analysis and error detection. The first and most detailed analysis is achieved with full source code instrumentation.
    [Show full text]
  • Variably Interprocedural Program Analysis for Runtime Error Detection
    Variably Interprocedural Program Analysis for Runtime Error Detection ∗ Aaron Tomb Guillaume Brat Willem Visser Univ. of California, Santa Cruz RIACS/NASA Ames SEVEN Networks Santa Cruz, CA, USA Moffett Field, CA, USA Redwood City, CA, USA [email protected] [email protected] [email protected] ABSTRACT 1. INTRODUCTION This paper describes an analysis approach based on a com- As software becomes more complex, and achieves an in- bination of static and dynamic techniques to find run-time creasingly critical role in the world’s infrastructure, the abil- errors in Java code. It uses symbolic execution to find con- ity to uncover defects becomes more and more crucial. Soft- straints under which an error (e.g., a null pointer derefer- ware flaws are estimated to cost the United States economy ence, array out of bounds access, or assertion violation) may alone tens of billions of dollars annually [24]. In response, occur and then solves these constraints to find test inputs many approaches to automated defect detection have been that may expose the error. It only alerts the user to the pos- explored. sibility of a real error when it detects the expected exception Program analysis tools aimed at defect detection for pro- during a program run. cedural or object-oriented languages can be divided into The analysis is customizable in two important ways. First, path-sensitive and path-insensitive approaches. Path insen- we can adjust how deeply to follow calls from each top-level sitive approaches, such as those based on abstract interpre- method. Second, we can adjust the path termination condi- tation, are traditionally used to show the absence of errors tion for the symbolic execution engine to be either a bound and can produce large numbers of spurious warnings — un- on the path condition length or a bound on the number of less the domain of programs and/or the error classes are times each instruction can be revisited.
    [Show full text]