ABSTRACT
Due to non-deterministic behavior and thread interleaving of concurrent programs, the debugging of concurrency and performance issues is a rather difficult and often tedious task. In this paper, we present an approach that combines statistical profiling, clustering and visualization to facilitate this task. We implemented our approach in a tool which is integrated as a plugin into a widely used IDE. First, we introduce our approach with details on the profiling and clustering strategy that produce runtime metrics and clusters of threads for source-code artifacts at different levels of abstraction (class and method) and the entire program. Next, we explain the design of our sparkline visualization which represents the clusters in situ, i.e. embedded in the program text next to the related source-code artifact in the source-code editor. More detailed information is available in separate views that also allow the user to interactively configure thread filters. In a demonstration study we illustrate the usefulness of the tool for understanding and fixing performance and concurrency issues. Finally, we report on first formative results from a small-scale user study.
- JetBrains s.r.o.2020. Program Structure Interface (PSI) / IntelliJ Platform SDK DevGuide. https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/psi.htmlGoogle Scholar
- Mohammad Mejbah Ul Alam, Tongping Liu, Guangming Zeng, and Abdullah Muzahid. 2017. SyncPerf: Categorizing, Detecting, and Diagnosing Synchronization Performance Bugs. In Proceedings of the Twelfth European Conference on Computer Systems, EuroSys 2017, Belgrade, Serbia, April 23-26, 2017. 298–313. https://doi.org/10.1145/3064176.3064186Google ScholarDigital Library
- Juan Pablo Sandoval Alcocer, Harold Camacho Jaimes, Diego Costa, Alexandre Bergel, and Fabian Beck. 2019. Enhancing Commit Graphs with Visual Runtime Clues. In 2019 Working Conference on Software Visualization, VISSOFT 2019, Cleveland, OH, USA, September 30 - October 1, 2019. IEEE, 28–32. https://doi.org/10.1109/VISSOFT.2019.00012Google Scholar
- Cyrille Artho, Klaus Havelund, and Shinichi Honiden. 2007. Visualization of Concurrent Program Executions. In 31st Annual International Computer Software and Applications Conference, COMPSAC 2007, Beijing, China, July 24-27, 2007. Volume 2. 541–546. https://doi.org/10.1109/COMPSAC.2007.236Google ScholarDigital Library
- Fabian Beck, Oliver Moseler, Stephan Diehl, and Günter Daniel Rey. 2013. In situ understanding of performance bottlenecks through visually augmented code. In IEEE 21st International Conference on Program Comprehension, ICPC 2013, San Francisco, CA, USA, 20-21 May, 2013. 63–72. https://doi.org/10.1109/ICPC.2013.6613834Google ScholarCross Ref
- Jürgen Cito, Philipp Leitner, Christian Bosshard, Markus Knecht, Genc Mazlami, and Harald C. Gall. 2018. PerformanceHat: augmenting source code with runtime performance traces in the IDE. In Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings, ICSE 2018, Gothenburg, Sweden, May 27 - June 03, 2018. 41–44. https://doi.org/10.1145/3183440.3183481Google ScholarDigital Library
- Bas Cornelissen, Andy Zaidman, Arie van Deursen, Leon Moonen, and Rainer Koschke. 2009. A Systematic Survey of Program Comprehension through Dynamic Analysis. IEEE Trans. Software Eng. 35, 5 (2009), 684–702. https://doi.org/10.1109/TSE.2009.28Google ScholarDigital Library
- Hyunsook Do, Sebastian G. Elbaum, and Gregg Rothermel. 2005. Supporting Controlled Experimentation with Testing Techniques: An Infrastructure and its Potential Impact. Empirical Software Engineering 10, 4 (2005), 405–435. https://doi.org/10.1007/s10664-005-3861-2Google ScholarDigital Library
- Sebastian Hahn, Matthias Trapp, Nikolai Wuttke, and Jürgen Döllner. 2015. Thread City: Combined Visualization of Structure and Activity for the Exploration of Multi-threaded Software Systems. In 19th International Conference on Information Visualisation, IV 2015, Barcelona, Spain, July 22-24, 2015. 101–106. https://doi.org/10.1109/iV.2015.28Google ScholarDigital Library
- JetBrains s.r.o.2021. All Developer Tools and Products by JetBrains. https://www.jetbrains.com/products.html#type=ideGoogle Scholar
- Benjamin Karran, Jonas Trümper, and Jürgen Döllner. 2013. SYNCTRACE: Visual thread-interplay analysis. In 2013 First IEEE Working Conference on Software Visualization (VISSOFT), Eindhoven, The Netherlands, September 27-28, 2013. 1–10. https://doi.org/10.1109/VISSOFT.2013.6650534Google ScholarCross Ref
- Shan Lu, Soyeon Park, Eunsoo Seo, and Yuanyuan Zhou. 2008. Learning from mistakes: a comprehensive study on real world concurrency bug characteristics. In Proceedings of the 13th International Conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS 2008, Seattle, WA, USA, March 1-5, 2008. 329–339. https://doi.org/10.1145/1346281.1346323Google ScholarDigital Library
- Katharina Mehner. 2005. Trace based debugging and visualisation of concurrent Java programs with UML. Ph.D. Dissertation. University of Paderborn, Germany. http://ubdata.uni-paderborn.de/ediss/17/2005/mehner/disserta.pdfGoogle Scholar
- Andy Nisbet, Nuno Miguel Nobre, Graham D. Riley, and Mikel Luján. 2019. Profiling and Tracing Support for Java Applications. In Proceedings of the 2019 ACM/SPEC International Conference on Performance Engineering, ICPE 2019, Mumbai, India, April 7-11, 2019. ACM, 119–126. https://doi.org/10.1145/3297663.3309677Google ScholarDigital Library
- Oliver Moseler, Lucas Kreber, and Stephan Diehl. 2021. Supplementary Material to ThreadRadar: A Thread-Aware Visualization for Debugging Concurrent Java Programs. https://doi.org/10.5281/zenodo.4753849Google Scholar
- Oracle. 2020. ArrayBlockingQueue (Java SE 11 & JDK 11). https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ArrayBlockingQueue.htmlGoogle Scholar
- Oracle. 2020. JVM(TM) Tool Interface 11.0.0. https://docs.oracle.com/en/java/javase/11/docs/specs/jvmti.htmlGoogle Scholar
- Wim De Pauw, Sophia Krasikov, and John F. Morar. 2006. Execution patterns for visualizing web services. In Proceedings of the ACM 2006 Symposium on Software Visualization, Brighton, UK, September 4-5, 2006. ACM, 37–45. https://doi.org/10.1145/1148493.1148499Google ScholarDigital Library
- Gustavo Pinto, Weslley Torres, Benito Fernandes, Fernando Castor Filho, and Roberto Souto Maior de Barros. 2015. A large-scale study on the usage of Java’s concurrent programming constructs. Journal of Systems and Software 106 (2015), 59–81. https://doi.org/10.1016/j.jss.2015.04.064Google ScholarDigital Library
- David Röthlisberger, Marcel Harry, Walter Binder, Philippe Moret, Danilo Ansaloni, Alex Villazón, and Oscar Nierstrasz. 2012. Exploiting Dynamic Information in IDEs Improves Speed and Correctness of Software Maintenance Tasks. IEEE Trans. Software Eng. 38, 3 (2012), 579–591. https://doi.org/10.1109/TSE.2011.42Google ScholarDigital Library
- David Röthlisberger, Marcel Harry, Alex Villazón, Danilo Ansaloni, Walter Binder, Oscar Nierstrasz, and Philippe Moret. 2009. Augmenting static source views in IDEs with dynamic metrics. In 25th IEEE International Conference on Software Maintenance (ICSM 2009), September 20-26, 2009, Edmonton, Alberta, Canada. IEEE Computer Society, 253–262. https://doi.org/10.1109/ICSM.2009.5306302Google ScholarCross Ref
- Matús Sulír, Michaela Bacíková, Sergej Chodarev, and Jaroslav Porubän. 2018. Visual augmentation of source code editors: A systematic mapping study. J. Vis. Lang. Comput. 49(2018), 46–59. https://doi.org/10.1016/j.jvlc.2018.10.001Google ScholarCross Ref
- Herb Sutter and James R. Larus. 2005. Software and the concurrency revolution. ACM Queue 3, 7 (2005), 54–62. https://doi.org/10.1145/1095408.1095421Google ScholarDigital Library
- Edward R. Tufte. 2006. Beautiful Evidence. Graphics Press, Cheshire, CT. 46–63 pages.Google ScholarDigital Library
- Mattias De Wael, Stefan Marr, and Tom Van Cutsem. 2014. Fork/join parallelism in the wild: documenting patterns and anti-patterns in Java programs using the fork/join framework. In 2014 International Conference on Principles and Practices of Programming on the Java Platform Virtual Machines, Languages and Tools, PPPJ ’14, Cracow, Poland, September 23-26, 2014. 39–50. https://doi.org/10.1145/2647508.2647511Google Scholar
- Kiri Wagstaff, Claire Cardie, Seth Rogers, and Stefan Schrödl. 2001. Constrained K-Means Clustering with Background Knowledge. In Proceedings of the Eighteenth International Conference on Machine Learning(ICML ’01). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 577–584.Google ScholarDigital Library
- Jan Waller, Christian Wulf, Florian Fittkau, Philipp Dohring, and Wilhelm Hasselbring. 2013. Synchrovis: 3D visualization of monitoring traces in the city metaphor for analyzing concurrency. In 2013 First IEEE Working Conference on Software Visualization (VISSOFT), Eindhoven, The Netherlands, September 27-28, 2013. 1–4. https://doi.org/10.1109/VISSOFT.2013.6650520Google ScholarCross Ref
Index Terms
ThreadRadar: A Thread-Aware Visualization for Debugging Concurrent Java Programs
Recommendations
The ThreadRadar visualization for debugging concurrent Java programs
AbstractDue to non-deterministic behavior and thread interleaving of concurrent programs, the debugging of concurrency and performance issues is a rather difficult and often tedious task. In this paper, we present an approach that combines statistical ...
A concurrency-agnostic protocol for multi-paradigm concurrent debugging tools
DLS 2017: Proceedings of the 13th ACM SIGPLAN International Symposium on on Dynamic LanguagesToday's complex software systems combine high-level concurrency models. Each model is used to solve a specific set of problems. Unfortunately, debuggers support only the low-level notions of threads and shared memory, forcing developers to reason about ...
Improving live debugging of concurrent threads through thread histories
Highlights- We present an analysis of existing debugging support for concurrent programs.
- ...
AbstractConcurrency issues are inherently harder to identify and fix than issues in sequential programs, due to aspects like indeterminate order of access to shared resources and thread synchronisation. Live debuggers are often used by ...
Comments