Abstract:
When a running program becomes unresponsive, it is often impossible for a user to determine if the program is performing some useful computation or if it has entered an i...Show MoreMetadata
Abstract:
When a running program becomes unresponsive, it is often impossible for a user to determine if the program is performing some useful computation or if it has entered an infinite loop. We present LOOPER, an automated technique for dynamically analyzing a running program to prove that it is non-terminating. LOOPER uses symbolic execution to produce simple non-termination arguments for infinite loops dependent on both program values and the shape of heap. The constructed arguments are verified with an off-the-shelf SMT solver. We have implemented our technique in a prototype tool for Java applications, and we demonstrate our technique's effectiveness on several non-terminating benchmarks, including a reported infinite loop bug in open-source text editor jEdit. Our tool is able to dynamically detect infinite loops deep in the execution of large Java programs with no false warnings, producing symbolic arguments that can aid in debugging non-termination.
Date of Conference: 16-20 November 2009
Date Added to IEEE Xplore: 18 March 2010
ISBN Information:
Print ISSN: 1938-4300