Context. Recent studies show that developers spend most of their programming time testing, verifying and debugging software. As applications become more and more complex, developers demand more advanced debugging support to ease the software development process. Inquiry. Since the 70's many debugging solutions were introduced. Amongst them, online debuggers provide a good insight on the conditions that led to a bug, allowing inspection and interaction with the variables of the program. However, most of the online debugging solutions introduce \textit{debugging interference} to the execution of the program, i.e. pauses, latency, and evaluation of code containing side-effects. Approach. This paper investigates a novel debugging technique called \outofplace debugging. The goal is to minimize the debugging interference characteristic of online debugging while allowing online remote capabilities. An \outofplace debugger transfers the program execution and application state from the debugged application to the debugger application, both running in different processes. Knowledge. On the one hand, \outofplace debugging allows developers to debug applications remotely, overcoming the need of physical access to the machine where the debugged application is running. On the other hand, debugging happens locally on the remote machine avoiding latency. That makes it suitable to be deployed on a distributed system and handle the debugging of several processes running in parallel. Grounding. We implemented a concrete out-of-place debugger for the Pharo Smalltalk programming language. We show that our approach is practical by performing several benchmarks, comparing our approach with a classic remote online debugger. We show that our prototype debugger outperforms by a 1000 times a traditional remote debugger in several scenarios. Moreover, we show that the presence of our debugger does not impact the overall performance of an application. Importance. This work combines remote debugging with the debugging experience of a local online debugger. Out-of-place debugging is the first online debugging technique that can minimize debugging interference while debugging a remote application. Yet, it still keeps the benefits of online debugging ( e.g. step-by-step execution). This makes the technique suitable for modern applications which are increasingly parallel, distributed and reactive to streams of data from various sources like sensors, UI, network, etc.
翻译:最近的研究显示, 开发者花费了大部分的编程时间测试、 核查和调试软件。 随着应用程序越来越复杂, 开发者需要更先进的调试支持, 以方便软件开发进程。 调查。 由于70 多个调试解决方案被引入了。 其中, 在线调试者可以很好地洞察导致错误的条件, 允许检查和与程序的变量互动。 然而, 多数在线调试解决方案在程序执行中引入了 extrodition 时间测试、 digging 干扰 。 但是, 多数在线调试解决方案在程序执行中引入了 liver 时间测试, 即暂停、 latitude, 以及评估含有副作用的代码。 本文调查了一种新调试技术, 称为“ 变换换” 程序, 在允许在线调试的同时, 将网上调试运行的干扰特性降到最低 。 调试器将程序的执行和应用状态从调试运行到调试器的第一个程序, 以不同的程序运行方式运行。 了解 一种手, 将自动调试的调试让开发者在远程调试, 在远程应用中进行调试运行中, 将自动调试运行, 运行到远程调试, 运行中, 将显示一种调试到在远程调试运行中, 运行到在远程调试运行到在远程调试运行中, 运行在远程操作在远程操作中, 运行在远程调试运行中, 运行中, 运行中, 运行在远程调试运行到在远程操作在远程运行中, 运行中, 运行到在运行到在远程操作在离机中, 运行, 运行中, 运行, 运行在远程操作在远程操作在离机中, 运行在运行中, 运行在运行在运行中, 运行中, 运行中, 运行中, 运行在运行在运行在运行在运行中, 运行中, 运行到在运行中, 运行中, 运行中, 运行在离机运行在运行到在运行在运行在运行在运行在运行在运行到其他机中, 运行中, 运行中, 运行到其他机 运行到 运行到其他机 运行到其他机 运行到其他机 运行到其他机 运行到