The AspectJtm Problem Diagnosis Guide

the AspectJ Team

Copyright (c) 2006 IBM Corporation and others. 2006 Contributors. All rights reserved.


This guide describes how to configure the AspectJ compiler/weaver to provide information for diagnosing problems in the input programs, the compiler/weaver or its configuration.

The AspectJ compiler and weaver can provide lots of information for diagnosing problems in building AspectJ programs. For problems in the input program, there are a number of default warning and error messages, as well as many configurable "lint" messages, all of which can be emitted normally, logged using standard facilities, or intercepted programmatically. These are discussed in Messages. Since most errors relate to writing pointcuts incorrectly, there is a section on Debugging Pointcuts.

For problems with the compiler/weaver itself there are three facilities that enable the AspectJ developers to resolve bugs even when it is too hard to deliver a reproducible test case:

  1. Tracing can be enabled to track progress up to the time of a failure;

  2. AspectJ Core Files can give a relatively complete picture of the state of the world at the time of a failure; and

  3. Dumping classes during load-time weaving is a way to capture both input and output classes during load-time weaving.

This guide describes how to configure messages to get the right information and how to configure traces, dumps, and core files. Although the compiler/weaver operates in roughly three modes (from the command-line, embedded in an IDE, and enabled as load-time weaving), the principles are basically the same for all modes. The differences lie in how to set up diagnostics and what information is likely to be relevant.

Table of Contents

1. Messages
Configuring Messages
Message scenarios
Compile-time weaving scenarios
Load-time weaving scenarios
Lint messages
2. Debugging Pointcuts
Debugging pointcuts
3. AspectJ Core Files
Configuring dump files
AJCore File Examples
4. Tracing
Configuring Tracing
5. Dumping classes during load-time weaving
Configuring bytecode dumping in load-time weaving
LTW Dump Examples