Popis: |
Software developers often face challenges in terms of quality and productivity to match competitive costs. The software industry seeks options to minimize this cost during different phases of software development and maintenance with improved productivity. Software developers adopt different tools for different purposes, such as understanding program behavior, debugging memory issues, debugging concurrency issues, and testing. In this article we study different debugging tools mostly used for program design analysis, thread debugging, and resource management. Stand-alone tools do track static or dynamic control flow, thread activities, etc. But these do not specifically identify the thread work-breakdown-structure, global memory location management, thread-data interaction, etc. to allow good comprehension of the concurrency model of the program. Similarly for resource management, we observe that the Valgrind addresses a few required features but does not offer automatic garbage collection. Moreover, to address the outcomes of different tools, developers must compile and configure the application in different environments. This is very time-consuming, requires skills in different software paradigms, and is sometimes not supported by the tool itself. As a result, they cannot be used in an inter-operable manner to analyze by relating the different tool’s outcomes. In this study, we conduct a detailed survey of the available tools and techniques and their limitations in identifying gaps. We address these gaps by implementing the tools for different phases of software development and maintenance. For example, a concurrency model detector based on thread behavior, resource debugger with features of automatic garbage collection, etc. can collectively inter-operate within our designed open-source tool framework Parallelc-Assist to address the common requests of the developers in one toolset. The tool is built upon open-source dynamic instrumentation tool PIN and supports a wide variety of IDEs and OS to detect various multi-threaded memory issues and provide additional features to inject concerns dynamically at run-time to extend it further according to the user’s needs. We verify our tool with a wide variety of industry-standard benchmarks and compare its features with other similar tools. |