As smartphones become more and more popular, developers are switching their focus from traditional desktop programs to mobile apps. Recording and replaying the execution of mobile apps is useful in development tasks, from reproducing bugs to profiling and testing. However, achieving effective record-and-replay on mobile devices is a balancing act between accuracy and overhead. Prior record-and-replay approaches have focused on replaying low-level instructions, which impose significant overhead. We propose a novel, stream-oriented record-and-replay approach which achieves high-accuracy and low-overhead by aiming at a sweet spot: recording and replaying sensor and network input, event schedules, and inter-app communication via intents. To demonstrate the versatility of our approach, we have constructed a tool named that supports record-and-replay on the Android platform. Through an evaluation on 50 popular Android apps, we show that: 's replay fidelity far exceeds current record-and-replay approaches for Android; 's low-overhead allows it to replay high-throughput, timing-sensitive apps; With the ability to deterministically replay event schedule, can help to reproduce and verify event-driven races.
[1]
Satish Narayanasamy,et al.
BugNet: continuously recording program execution for deterministic replay debugging
,
2005,
32nd International Symposium on Computer Architecture (ISCA'05).
[2]
Todd D. Millstein,et al.
RERAN: Timing- and touch-sensitive record and replay for Android
,
2013,
2013 35th International Conference on Software Engineering (ICSE).
[3]
Bo Zhou,et al.
A cross-platform analysis of bugs and bug-fixing in open source projects: desktop vs. Android vs. iOS
,
2015,
EASE.
[4]
Yongjian Hu,et al.
Versatile yet lightweight record-and-replay for Android
,
2015,
OOPSLA.
[5]
Rupak Majumdar,et al.
Race detection for Android applications
,
2014,
PLDI.
[6]
Samuel T. King,et al.
ReVirt: enabling intrusion analysis through virtual-machine logging and replay
,
2002,
OPSR.