Upload
bastian-kruck
View
308
Download
0
Embed Size (px)
Citation preview
Multi-level Debugging for Interpreter Developers
Bastian Kruck, Stefan Lehmann, Christoph Kessler, Jakob Reschke, Tim Felgentreff, Jens Lincke, Robert Hirschfeld
Software Architecture Group, HPI Potsdam15.03.2016, LaMOD16, Málaga
1. Debugging across Languages
2. Debugging within Languages across Abstraction Barriers
3. Unification of such levels
Three Phases
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck Chart 2
How does debugging across languages look like?
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck Chart 3
How does debugging across languages look like?
Chart 4
Bastian KruckHPI Potsdam
Multi-level Debugging for Interpreter Developers
Scheme embedded in Qoppa
Chart 5
Scheme
Qoppa
Embedded in(define if (vau (b t f) env (eval env (bool (eval env b) t f))))
(define quote (vau (x) _ x))
■ Qoppa is a Scheme without special forms: all arguments are evaluated before entering the method
■ Vau is the only explicitly evaluating primitive (no automatic evaluation)
■ Vau is used to implement all other special forms
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Scheme embedded in Qoppa
Chart 6
Scheme
Qoppa
(define if (vau (b t f) env (eval env (bool (eval env b) t f))))
(define quote (vau (x) _ x))
Smalltalk
Embedded in
Interpreted by
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
How to teach language barriersto a debugger?
The common symbolic debugger
Chart 8Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
The Minimal Feature Set of a Debugger
Chart 9
Step buttons
Call Stack
Helps to zoom frombehavioral
overview into detailOverview
Detail
Source View
Helps to look at the past and
futureFuture
Past
Object InspectorHelps to interact with state of the current
Level of details
• Detail State• Detail State• Detail State
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
eval:in:
Call stack of QoppaS
Chart 10Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 11
operate:on:in:
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 12
Operative>>in:operateOn:
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 13
wrapPrim:countingArgs:
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 14
buildGlobalEnv
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 15
• Recurrence Patterns in call stacks signal an unnoticed abstraction level
• The varying barrier-width makes it hard to read
• Debugger users should be able to:
• Filter stack frames• Fold open levels on
demand
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Higher-level information are encoded in all those
Chart 16
Step buttons
Call Stack
Various barrier- widths are present
in the call chainOverview
Detail
Source ViewSource code implements
abstract concepts such as events or state machinesFuture
Past
Object InspectorData contain
implementation specifica such as storage
strategies
• Detail State• Detail State• Detail State
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
How to teach language abstraction barriersto a debugger?
■ Data abstraction enables modularity□ Isolate math domain implementation□ Isolate abstract type□ Isolate representation details
■ Behavioral black-box abstractions toenable modularity
■ Not present in current debugging tools■ Interpreters form a new layer of abstractions
that is loosely coupled to the lower one□ because of that very explicit interface□ A program is the interpreters data
Abstraction barriers should be respected in debuggers
Chart 18
Structure and Interpretation of Computer Programs
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Current debuggers that respect abstraction barriers:■ Rails BacktraceCleaner
■ Visual studio with Show only my code
■ Eclipse with Step filters
□ AOP & COP□ Code metrics
■ Squeak UnhandledException
■ Squeak Step through
There is no general abstraction-aware debugger so far
(Current state of abstraction barriers in debuggers)
Chart 19Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
(define (fact-r n acc)(if (<= n 1)(begin (halt) acc)(fact-r (- n 1) (* acc n))))
(fact (- 5 2))
Example of a Multi-level Debugger
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck Chart 20
Chart 21Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck Chart 22
Chart 23
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Chart 24
Grouping frames by interpreter frames
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Chart 25
Specialized Representation
Grouping frames by interpreter frames
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Call stack of QoppaS
Chart 26Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Chart 27
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Chart 28
Level icons show level affiliation
Chart 29
Filter levels to focus
e.g. Smalltalk Packages, or
Authoring sessions
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
■ By package■ By class■ By author■ By creation time■ By JIT-Optimization-State
(Identifying levels)
Chart 30Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Implementation of both
Language barriers
Abstraction barriers
„A mediator is a software module that exploits encoded knowledge about certain sets or subsets of data to create information for a higher layer of applications“ [Wie92]
Mediator-Wrapper-Architecture
Chart 32
Mediator
Higher levelinformation
Encoded Knowledge
DataData
Gio Wiederhold: “Mediators in the Architecture of Future Information Systems”
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Mediators enrich call frames
Chart 33
TitleIconGroupSourceData State
Multi-level Debugger
INOUT
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Mediator-Wrapper-Architecture
Chart 34
Squeak VM
Reflection: Squeak contexts
Vivide
QoppaS Interpreter
Squeak Primitives
Qoppa Language
…
Multi-level
Debugger
…
WIP
Future Work: Debugger Primitives
Chart 35
Multi-level Debugger Scheme
Language
Squeak asimplementation language
Qoppa asimplementation language
Qoppa Language
DebuggerPrimitive
■ Reuse low-level debugger for higher levels
■ Cross level functionality comes for free
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Multi-level Debugging for Interpreter Developers
Thanks for your frameworks and support:Marcel Taeumel (VIVIDE),Patrick Rein (OhmS)Thanks to Mod16 and SWA Group for funding
Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
[1] Charles, P. et al. 2009. Accelerating the creation of customized, language-Specific IDEs in Eclipse. ACM Sigplan Notices. 44, 10 (2009), 191.[2] Chiş, A. et al. 2015. Practical domain-specific debuggers using the Moldable Debugger framework. Computer Languages, Systems and Structures. 44, (Dec. 2015), 89–113.[3] Chiş, A. et al. 2015. The moldable inspector. 2015 ACM - Onward! 2015 (New York, New York, USA, Oct. 2015), 44–60.[4] Erdweg, S. et al. 2012. Language Composition Untangled. LDTA ’12. (2012).[5] Freudenberg, B. et al. 2014. SqueakJS A Modern and Practical Smalltalk that Runs in Any Browser. DLS ’14. (2014), 57–66.[6] Pavletic, D. et al. 2014. Extensible Debuggers for Extensible Languages. Softwaretechnik-Trends. 33, 2 (2014), 51–52.[7] Pavletic, D. and Raza, S.A. 2015. Multi-Level Debugging for Extensible Languages. Workshop Software-Reengineering und -Evolution. 17 (2015), 21–23.[8] Renggli, L. et al. 2010. Embedding Languages Without Breaking Tools. ECOOP. (2010), 380–404.[9] Wu, H. et al. 2004. Debugging Domain-Specific Languages In Eclipse. Eclipse Technology Exchange Poster. (2004), 1–5.
Related Work
Chart 37Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck
Debugger Primitives■ How to bake them into the known reflective capabilities of languages?
Challenges
Chart 38Multi-level Debugging for Intrepreter Developers, LaMOD’16, 15.03.2016, Bastian Kruck