Postmortem accurate IR-level state recovery for deployed concurrent programs

Postmortem accurate IR-level state recovery for deployed concurrent programs
复制标题

对已部署的并发程序进行事后准确的 IR 级状态恢复

DOI:
10.1145/3493499.3493502
复制
发表时间:
2021
期刊:
ACM SIGAPP Applied Computing Review
影响因子:
--
通讯作者:
Katsuhiko Gondow
Katsuhiko Gondow
中科院分区:
--
文献类型:
--
作者:
Shinji Hoshino;Yoshitaka Arahori;Katsuhiko Gondow

文献摘要

相似文献

并发软件部署失败的检测是保证软件质量的重要环节。然而,这样的故障是难以调试的,因为它们的行为是不确定的,并且用常规手段可以获得有限的信息。反向调试器,如REPT [11],通过恢复故障前的数据值来帮助调试。这是通过使用硬件跟踪器来记录控制流信息,然后使用该信息和传统的核心转储通过机器级的反向执行来恢复数据值来实现的。REPT的数据值恢复算法是可靠和快速的。但由于其对体系结构的依赖性,实现成本很高。将REPT应用于更抽象的IR(中间表示)级指令以对抗这一点,与原始x86_64实现相比,产生了有限的结果和较低的准确性。这主要是因为堆栈布局是在IR级抽象的,本文提出了STRAB(State Recovery at Abstract-level),一系列我们提出的解决这些问题的方法。STRAB分两个阶段工作。首先,核心转储中的数据值使用丰富的调试信息(DWARF 3)和我们称为中间恢复提升的新技术从机器级提升到IR级,后者有助于在IR级恢复更多堆数据值。第二,我们的新的混合内存位置分辨率减少了精度损失,由于抽象的堆栈布局在IR-level. The各种现实世界的并发程序的实验结果表明,STRAB有显着更高的精度相比,REPT在IR-level(+40%平均),只有轻微的减速(x2.7平均),同时也实现了架构无关性。
Debugging failures of deployed concurrent software is important for quality assurance. However, such failures are difficult to debug because their behavior is non-deterministic and limited information can be obtained with conventional means. Reverse debuggers such as REPT [11] assists with debugging by recovering data values before the failure. This is achieved by using a hardware-tracer to log control-flow information, then using the information and a conventional coredump to recover data values via reverse-execution at machine-level. REPT's algorithm for data value recovery is reliable and fast. But the implementation cost is high because of its dependence on architecture. Applying REPT to more abstract IR (Intermediate Representation) level instructions to counter this yielded limited results with low accuracy compared to the original x86_64 implementation. The main reason for this is that the stack layout is abstracted at IR-level.In this paper, we present STRAB (State Recovery at Abstract-level), a collection of our proposed methods to solve these problems. STRAB works in two phases. First, the data values in the coredump are lifted from machine-level to IR-level using rich debug information (DWARF3) and a novel technique we call mid-recovery lifting, the latter helping to recover more heap data values at IR-level. Second, our novel hybrid memory location resolution reduces the accuracy loss due to the abstracted stack layout at IR-level.Experimental results on a variety of real-world concurrent programs show that STRAB has significantly higher accuracy compared to REPT at IR-level (+40% on average) with only minor slowdowns (x2.7 on average), while also achieving architecture-independence.