1,217 research outputs found
A New Hybrid Debugging Architecture for Eclipse
The final publication is available at Springer via http://dx.doi.org/10.1007/978-3-319-14125-1_11[EN] During many years, print debugging has been the most used
method for debugging. Nowadays, however, industrial languages come
with a trace debugger that allows programmers to trace computations
step by step using breakpoints and state viewers. Almost all modern
programming environments include a trace debugger that allows us to
inspect the state of a computation in any given point. Nevertheless,
this debugging method has been criticized for being completely manual
and time-consuming. Other debugging techniques have appeared to
solve some of the problems of Trace Debugging, but they suffer from
other problems such as scalability. In this work we present a new hybrid
debugging technique. It is based on a combination of Trace Debugging,
Algorithmic Debugging and Omniscient Debugging to produce a synergy
that exploits the best properties and strong points of each technique. We
describe the architecture of our hybrid debugger and our implementation
that has been integrated into Eclipse as a plugin.This work has been partially supported by the Spanish Ministerio de Economía y Competitividad (Secretaria de Estado de Investigación, Desarrollo e Innovación) under grant TIN2008-06622-003-02 and by the Generalitat Valenciana
under grant PROMETEO/2011/052. David Insa was partially supported by the Spanish Ministerio de Educación under FPU grant AP2010-4415.González, J.; Insa Cabrera, D.; Silva Galiana, JF. (2013). A New Hybrid Debugging Architecture for Eclipse. En Logic-Based Program Synthesis and Transformation. Springer. 183-201. doi:10.1007/978-3-319-14125-1_11S183201Swi-prolog (1987). http://www.swi-prolog.org/Netbeans (1999). http://www.netbeans.org/Eclipse (2003). http://www.eclipse.org/Omnicore codeguide (2007). http://www.omnicore.com/en/codeguide.htmBorland JBuilder (2008). http://www.embarcadero.com/products/jbuilder/Sicstus prolog spider ide (2009). https://sicstus.sics.se/spider/Caballero, R.: A Declarative Debugger of Incorrect Answers for Constraint Functional-Logic Programs. In: Proceedings of the 2005 ACM-SIGPLAN Workshop on Curry and Functional Logic Programming (WCFLP 2005), pp. 8–13. ACM Press, New York (2005)Davie, T., Chitil, O.: Hat-delta: One Right Does Make a Wrong. In: Proceedings of the 7th Symposium on Trends in Functional Programming (TFP 2006) (April 2006)Gestwicki, P., Jayaraman, B.: JIVE: Java Interactive Visualization Environment. In: Companion to the 19th Annual ACM-SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 2004), pp. 226–228. ACM Press, New York (2004)Giammona, D.: ORACLE ADF - Putting It Together. Technical report, ADF Declarative Debugger Archives (November 2009)Girgis, H., Jayaraman, B.: JavaDD: a Declarative Debugger for Java. Technical report,University at Buffalo (2006)González, F., De Miguel, R., Serrano, S.: Depurador Declarativo de Programas Java. Technical report, Universidad Complutense de Madrid (2006). http://eprints.ucm.es/9114/Hermanns, C., Kuchen, H.: Hybrid Debugging of Java Programs. In: Escalona, M.J., Cordeiro, J., Shishkov, B. (eds.) ICSOFT 2011. CCIS, vol. 303, pp. 91–107. Springer, Heidelberg (2013)Montebello, M., Abela, C.: Design and Implementation of a Backward-In-Time. In: Chaudhri, A.B., Jeckle, M., Rahm, E., Unland, R. (eds.) NODe-WS 2002. LNCS, vol. 2593, pp. 46–58. Springer, Heidelberg (2003)Insa, D., Silva, J.: An Algorithmic Debugger for Java. In: Proceedings of the 26th IEEE International Conference on Software Maintenance (ICSM 2010), pp. 1–6 (2010)Insa, D., Silva, J.: Scaling Up Algorithmic Debugging with Virtual Execution Trees. In: Alpuente, M. (ed.) LOPSTR 2010. LNCS, vol. 6564, pp. 149–163. Springer, Heidelberg (2011)Insa, D., Silva, J.: loops2recursion Java Library (2013). http://www.dsic.upv.es/~jsilva/loops2recursion/Kouh, H.-J., Yoo, W.-H.: The Efficient Debugging System for Locating Logical Errors in Java Programs. In: Kumar, V., Gavrilova, M.L., Kenneth Tan, C.J., L’Ecuyer, P. (eds.) ICCSA 2003. LNCS, vol. 2667, pp. 684–693. Springer, Heidelberg (2003)B. Lewis. Debugging Backwards in Time. Available in the Computing Research Repository 2003, ( http://arxiv.org/abs/cs.SE/0310016 ), cs.SE/0310016Lienhard, A., Gîrba, T., Wang, J.: Practical Object-Oriented Back-in-Time Debugging. In: Vitek, J. (ed.) ECOOP 2008. LNCS, vol. 5142, pp. 592–615. Springer, Heidelberg (2008)S. Microsystems. Java Platform Debugger Architecture - JPDA (2010). http://java.sun.com/javase/technologies/core/toolsapis/jpda/Mirghasemi, S., Barton, J., Petitpierre, C.: Debugging by lastChange. Technical report (2011). http://people.epfl.ch/salman.mirghasemiNilsson, H.: Declarative Debugging for Lazy Functional Languages. PhD thesis, Linköping, Sweden (May 1998)Nilsson, H., Fritzson, P.: Algorithmic Debugging for Lazy Functional Languages. Journal of Functional Programming 4(3), 337–370 (1994)Pothier, G.: Towards Practical Omniscient Debugging. PhD thesis, University of Chile (June 2011)Shapiro, E.: Algorithmic Program Debugging. MIT Press (1982)Silva, J.: A Survey on Algorithmic Debugging Strategies. Advances in Engineering Software 42(11), 976–991 (2011
Recommended from our members
Righting Web Development
The web browser is the most important application runtime today, encompassing all types of applications on practically every Internet-connected device. Browsers power complete office suites, media players, games, and augmented and virtual reality experiences, and they integrate with cameras, microphones, GPSes, and other sensors available on computing devices. Many apparently native mobile and desktop applications are secretly hybrid apps that contain a mix of native and browser code. History has shown that when new devices, sensors, and experiences appear on the market, the browser will evolve to support them.
Despite the browser\u27s importance, developing web applications is exceedingly difficult. Web browsers organically evolved from a document viewer into a ubiquitous program runtime. The browser\u27s scripting language for web designers, JavaScript, has grown into the only universally supported programming language in the browser. Unfortunately, JavaScript is notoriously difficult to write and debug. The browser\u27s high-level and event-driven I/O interfaces make it easy to add simple interactions to webpages, but these same interfaces lead to nondeterministic bugs and performance issues in larger applications. These bugs are challenging for developers to reason about and fix.
This dissertation revisits web development and provides developers with a complete set of development tools with full support for the browser environment. McFly is the first time-traveling debugger for the browser, and lets developers debug web applications and their visual state during time-travel; components of this work shipped in Microsoft\u27s ChakraCore JavaScript engine. BLeak is the first system for automatically debugging memory leaks in web applications, and provides developers with a ranked list of memory leaks along with the source code responsible for them. BCause constructs a causal graph of a web application\u27s events, which helps developers understand their code\u27s behavior. Doppio lets developers run code written in conventional languages in the browser, and Browsix brings Unix into the browser to enable unmodified programs expecting a Unix-like environment to run directly in the browser. Together, these five systems form a solid foundation for web development
Java Virtual Machine Multi-debugger Proxy Server
Java platvorm ei koosne mitte ainult abstraktsest masinast,Java virtuaalmasinast (JVM), vaid sisaldab ka nutikaid tööriistu töötavaterakendustega suhtlemiseks. Seda funktsionaalsust käsitleb Java platvormi siluriarhitektuur (JPDA). JPDA kasulikkust piirab asjaolu, et ühe JVM-i külge onkorraga võimalik ühendada ülimalt üks silur, mis teeb aga paljud silumise võttedvõimatuks. Selle töö eesmärgiks on luua puhverserver, mis eemaldaks antud piirangu nii, et puhverserver ühenduks ise virtuaalmasinaga ning lubaks endaga ühendada mitu silurit. Selline puhverserver võimaldab ühte JVM-i siluda mitmest eri arvutist korraga.The Java platform provides not only a highly performant abstractcomputing machine, the Java Virtual Machine (JVM), but also containssophisticated tools for interfacing with running applications. This functionality isspecified in the Java Platform Debugger Architecture (JPDA). JPDA has alimitation of not being able to attach multiple debuggers to a single JVM whichmakes many debugging workflows and use cases impossible to accomplish. The purpose of this paper is to get rid of this limitation by creating a proxy server which would connect to the JVM and then allow multiple debuggers to connect to it. Such proxy server would allow the JVM to be debugged from multiple remote computers at the same time
Idempotent I/O for safe time travel
Debuggers for logic programming languages have traditionally had a capability
most other debuggers did not: the ability to jump back to a previous state of
the program, effectively travelling back in time in the history of the
computation. This ``retry'' capability is very useful, allowing programmers to
examine in detail a part of the computation that they previously stepped over.
Unfortunately, it also creates a problem: while the debugger may be able to
restore the previous values of variables, it cannot restore the part of the
program's state that is affected by I/O operations. If the part of the
computation being jumped back over performs I/O, then the program will perform
these I/O operations twice, which will result in unwanted effects ranging from
the benign (e.g. output appearing twice) to the fatal (e.g. trying to close an
already closed file). We present a simple mechanism for ensuring that every I/O
action called for by the program is executed at most once, even if the
programmer asks the debugger to travel back in time from after the action to
before the action. The overhead of this mechanism is low enough and can be
controlled well enough to make it practical to use it to debug computations
that do significant amounts of I/O.Comment: In M. Ronsse, K. De Bosschere (eds), proceedings of the Fifth
International Workshop on Automated Debugging (AADEBUG 2003), September 2003,
Ghent. cs.SE/030902
Enhancing Trace Debugging with Algorithmic and Omniscient Debugging
During many years, Print Debugging has been the most used
method for debugging. Nowadays, however, industrial languages come
with a trace debugger that allows programmers to trace computations
step by step using breakpoints and state viewers. Almost all modern
programming environments include a trace debugger that allows us to
inspect the state of a computation in any given point. Nevertheless,
this debugging method has been criticized for being completely manual
and time-consuming. Other debugging techniques have appeared to
solve some of the problems of Trace Debugging, but they suffer from
other problems such as scalability. In this work we present a new hybrid
debugging technique. It is based on a combination of Trace Debugging,
Algorithmic Debugging and Omniscient Debugging to produce a synergy
that exploits the best properties and strong points of each technique. We
describe the architecture of our hybrid debugger and our implementation
that has been integrated into Eclipse as a plugin.This work has been partially supported by the Spanish Ministerio de Economía y Competitividad (Secretaría de Estado de Investigación, Desarrollo e Innovación) under grant TIN2008-06622-C03-02 and by the Generalitat Valenciana under grant PROMETEO/2011/052. David Insa was partially supported by the Spanish Ministerio de Educación under FPU grant AP2010-4415.González, J.; Insa Cabrera, D.; Silva Galiana, JF. (2013). Enhancing Trace Debugging with Algorithmic and Omniscient Debugging. En Logic-Based Program Synthesis and Transformation. Springer. 183-201. http://hdl.handle.net/10251/72827S18320
Monitoring-Oriented Programming: A Tool-Supported Methodology for Higher Quality Object-Oriented Software
This paper presents a tool-supported methodological paradigm for object-oriented software development, called monitoring-oriented programming and abbreviated MOP, in which runtime monitoring is a basic software design principle. The general idea underlying MOP is that software developers insert specifications in their code via annotations. Actual monitoring code is automatically synthesized from these annotations before compilation and integrated at appropriate places in the program, according to user-defined configuration attributes. This way, the specification is checked at runtime against the implementation. Moreover, violations and/or validations of specifications can trigger user-defined code at any points in the program, in particular recovery code, outputting or sending messages, or raising exceptions.
The MOP paradigm does not promote or enforce any specific formalism to specify requirements: it allows the users to plug-in their favorite or domain-specific specification formalisms via logic plug-in modules. There are two major technical challenges that MOP supporting tools unavoidably face: monitor synthesis and monitor integration. The former is heavily dependent on the specification formalism and comes as part of the corresponding logic plug-in, while the latter is uniform for all specification formalisms and depends only on the target programming language. An experimental prototype tool, called Java-MOP, is also discussed, which currently supports most but not all of the desired MOP features. MOP aims at reducing the gap between formal specification and implementation, by integrating the two and allowing them together to form a system
Implementing a Debugger for Dresden OCL
Although originally designed as an extension for the Unifi ed Modeling Language (UML), today, the Object Constraint Language (OCL) has been broadly adopted in the context of both UML and other modeling and domain-specifi c languages. However, appropriate tooling, supporting modelers and software developers on using OCL is still scarce and lacks important features such as debugging support. As OCL constraints are likely to become rather complex for real world examples, it is hard to comprehend the in uence of single OCL expressions and subexpressions on the result of a completely evaluated OCL constraint in the context of speci fic constrained objects. Therefore, debugging is of topmost importance for both constraint comprehension and maintenance. Thus, the major task of this work is to develop a graphical debugger integrated into Dresden OCL and the Eclipse Integrated Development Environment (IDE) to fill this gap.:1 Introduction
2 The Dresden OCL Toolkit
2.1 The Dresden OCL Toolkit
2.2 The Dresden OCL2 Toolkit
2.3 Dresden OCL2 for Eclipse
2.4 Dresden OCL
3 The Eclipse Debugging Framework
3.1 The Debug Model
3.2 Interacting with the Debug Model
3.3 The Execution Control Commands
4 Requirements Analysis and Related Work
4.1 Requirements Analysis
4.2 Related Work
5 Design and Structure
5.1 Architecture
5.1.1 Package Structure
5.1.2 Class Structure
5.2 The OCL Debug Model
5.3 The Mapping from ASM to AST
5.4 The OCL Debugger
5.4.1 The Implementation of the Debugger
5.4.2 Testing the Debugger
6 Graphical User Interface Implementation
6.1 The Dresden OCL Debug Perspective
6.2 Using the Debugger
6.2.1 Selecting a Model
6.2.2 Selecting a Model Instance
6.2.3 Debugging
6.3 Summary
7 Evaluation and Future Work 33
7.1 Evaluation
7.2 Future Work
8 Summary and Conclusio
- …