Advanced compiler design and implementation
Advanced compiler design and implementation
Practical Methods for Proving Program Termination
CAV '02 Proceedings of the 14th International Conference on Computer Aided Verification
Extracting safe and precise control flow from binaries
RTCSA '00 Proceedings of the Seventh International Conference on Real-Time Systems and Applications
LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
Data structure repair using goal-directed reasoning
Proceedings of the 27th international conference on Software engineering
Pin: building customized program analysis tools with dynamic instrumentation
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Rx: treating bugs as allergies---a safe method to survive software failures
Proceedings of the twentieth ACM symposium on Operating systems principles
Have things changed now?: an empirical study of bug characteristics in modern open source software
Proceedings of the 1st workshop on Architectural and system support for improving software dependability
Building a reactive immune system for software services
ATEC '05 Proceedings of the annual conference on USENIX Annual Technical Conference
Enhancing server availability and security through failure-oblivious computing
OSDI'04 Proceedings of the 6th conference on Symposium on Opearting Systems Design & Implementation - Volume 6
Detecting and eliminating memory leaks using cyclic memory allocation
Proceedings of the 6th international symposium on Memory management
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ASSURE: automatic software self-healing using rescue points
Proceedings of the 14th international conference on Architectural support for programming languages and operating systems
Self-recovery in server programs
Proceedings of the 2009 international symposium on Memory management
Automatically finding patches using genetic programming
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Automatically patching errors in deployed software
Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles
A termination analyzer for Java bytecode based on path-length
ACM Transactions on Programming Languages and Systems (TOPLAS)
Looper: Lightweight Detection of Infinite Loops at Runtime
ASE '09 Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering
Generating Fixes from Object Behavior Anomalies
ASE '09 Proceedings of the 2009 IEEE/ACM International Conference on Automated Software Engineering
Non-termination checking for imperative programs
TAP'08 Proceedings of the 2nd international conference on Tests and proofs
Automated fixing of programs with contracts
Proceedings of the 19th international symposium on Software testing and analysis
Automated program repair through the evolution of assembly code
Proceedings of the IEEE/ACM international conference on Automated software engineering
Ad hoc synchronization considered harmful
OSDI'10 Proceedings of the 9th USENIX conference on Operating systems design and implementation
Faults in linux: ten years later
Proceedings of the sixteenth international conference on Architectural support for programming languages and operating systems
Improving the performance of trace-based systems by false loop filtering
Proceedings of the sixteenth international conference on Architectural support for programming languages and operating systems
Termination of polynomial programs
VMCAI'05 Proceedings of the 6th international conference on Verification, Model Checking, and Abstract Interpretation
CAV'06 Proceedings of the 18th international conference on Computer Aided Verification
What to do when things go wrong: recovery in complex (computer) systems
Proceedings of the 11th annual international conference on Aspect-oriented Software Development Companion
Obtaining and reasoning about good enough software
Proceedings of the 49th Annual Design Automation Conference
A systematic study of automated program repair: fixing 55 out of 105 bugs for $8 each
Proceedings of the 34th International Conference on Software Engineering
Bolt: on-demand infinite loop escape in unmodified binaries
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Parallelizing Sequential Programs with Statistical Accuracy Tests
ACM Transactions on Embedded Computing Systems (TECS) - Special Section on Probabilistic Embedded Computing
Extracting useful computation from error-prone processors for streaming applications
Proceedings of the Conference on Design, Automation and Test in Europe
Automatic recovery from runtime failures
Proceedings of the 2013 International Conference on Software Engineering
Current challenges in automatic software repair
Software Quality Control
Hi-index | 0.00 |
Infinite loops can make applications unresponsive. Potential problems include lost work or output, denied access to application functionality, and a lack of responses to urgent events. We present Jolt, a novel system for dynamically detecting and escaping infinite loops. At the user's request, Jolt attaches to an application to monitor its progress. Specifically, Jolt records the program state at the start of each loop iteration. If two consecutive loop iterations produce the same state, Jolt reports to the user that the application is in an infinite loop. At the user's option, Jolt can then transfer control to a statement following the loop, thereby allowing the application to escape the infinite loop and ideally continue its productive execution. The immediate goal is to enable the application to execute long enough to save any pending work, finish any in-progress computations, or respond to any urgent events. We evaluated Jolt by applying it to detect and escape eight infinite loops in five benchmark applications. Jolt was able to detect seven of the eight infinite loops (the eighth changes the state on every iteration). We also evaluated the effect of escaping an infinite loop as an alternative to terminating the application. In all of our benchmark applications, escaping an infinite loop produced a more useful output than terminating the application. Finally, we evaluated how well escaping from an infinite loop approximated the correction that the developers later made to the application. For two out of our eight loops, escaping the infinite loop produced the same output as the corrected version of the application.