Framework for Java Pointer Analysis

Introduction

Versatile. Doop is a framework for pointer, or points-to, analysis of Java programs. Doop implements a range of algorithms, including context insensitive, call-site sensitive, and object-sensitive analyses, all specified modularly as variations on a common code base.

Fast. Compared to alternative context-sensitive pointer analysis implementations (such as Paddle) Doop is much faster, and scales better. Also, with comparable context-sensitivity features, Doop is more precise in handling some Java features (for example exceptions) than alternatives.

Declarative. Doop builds on the idea of specifying pointer analysis algorithms declaratively, using Datalog: a logic-based language for defining (recursive) relations. Doop carries the declarative approach further than past work (such as bddbddb) by describing the full end-to-end analysis in Datalog and optimizing aggressively through exposition of the representation of relations (for example indexing) to the Datalog language level. Doop uses the Datalog dialect and engine of LogicBlox.

News

OOPSLA 2009

Presentation of paper "Strictly Declarative Specification of Sophisticated Points-to Analyses" at the 24th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2009), October 2009, Orlando, Florida, USA.

ISSTA 2009

Presentation of paper "Exception and Points-to Analysis: Better Together" at the International Symposium on Software Testing and Analysis (ISSTA 2009), July 2009, Chicago, Illinois, USA.

Features

Major features of Doop are:

Together, these features make Doop by far the most sophisticated and reliable points-to analysis implementation for Java.

last update: 2009-12-3