A pointcut language for setting advanced breakpoints

In interactive debugging, it is an essential task to set breakpoints specifying where a program should be suspended at runtime to allow interaction. A debugging session may use multiple logically related breakpoints so that the sequence of their (de)activations leads to the expected suspension with the least irrelevant suspensions. A (de)activation is sometimes decided by some runtime context values related to that breakpoint. However, existing breakpoints, which are mainly based on line locations, are not expressive enough to describe the logic and the collaboration. Programmers have to manually perform some repeated tasks, thus debugging efficiency is decreased. In this paper, we identify five frequently encountered debugging scenarios that require to use multiple breakpoints. For such scenarios, it is often easier than using the traditional debugger to write pointcuts in an aspect-oriented language, and to suspend the execution at the selected join points. However, existing languages cannot handle the scenarios neatly and uniformly. Therefore, we design and implement a breakpoint language that uses pointcuts to select suspension times in the program. Our language allows programmers to use comprehensible source-level abstractions to define breakpoints. Also, multiple breakpoints can be freely composed to express their collaboration. In this way, an expected suspension can be expressively programmed and reached with less or even no irrelevant suspensions.

[1]  Rémi Douence,et al.  Static analysis of aspect interaction and composition in component models , 2011, GPCE '11.

[2]  Grigore Rosu,et al.  Dependent advice: a general approach to optimizing history-based aspects , 2009, AOSD '09.

[3]  Shmuel Katz,et al.  Incremental analysis of interference among aspects , 2008, FOAL.

[4]  Mira Mezini,et al.  An In-Depth Look at ALIA4J , 2012, J. Object Technol..

[5]  Pascal Durr,et al.  Resource-based Verification for Robust Composition of Aspects , 2008 .

[6]  Roel Wuyts,et al.  Detecting unanticipated aspect interferences at runtime with compositional intentions , 2009, RAM-SE@ECOOP.

[7]  Roel Wuyts,et al.  Composing aspects with aspects , 2010, AOSD.

[8]  E. B. Swanson,et al.  Software maintenance management , 1980 .

[9]  Eric Bodden Stateful breakpoints: a practical approach to defining parameterized runtime monitors , 2011, ESEC/FSE '11.

[10]  Brent Hailpern,et al.  Software debugging, testing, and verification , 2002, IBM Syst. J..

[11]  Ondrej Lhoták,et al.  abc : An Extensible AspectJ Compiler , 2006, LNCS Trans. Aspect Oriented Softw. Dev..

[12]  Christoph Bockisch,et al.  A fine-grained debugger for aspect-oriented programming , 2012, AOSD '12.

[13]  Mireille Ducassé,et al.  Coca: an automated debugger for C , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[14]  Ondrej Lhoták,et al.  Adding trace matching with free variables to AspectJ , 2005, OOPSLA '05.

[15]  Bharat Jayaraman,et al.  JavaDD: a Declarative Debugger for Java , 2006 .

[16]  Marc Eisenstadt,et al.  My hairiest bug war stories , 1997, CACM.

[17]  Rick Chern,et al.  Debugging with control-flow breakpoints , 2007, AOSD.

[18]  Shigeru Chiba,et al.  Bugdel: an aspect-oriented debugging system , 2005, 12th Asia-Pacific Software Engineering Conference (APSEC'05).

[19]  Istvan Nagy On the Design of Aspect-Oriented Composition Models for Software Evolution , 2006 .