qira 是一個 timeless debugger 。
qira 的全名是 QEMU Interactive Runtime Analyzer。
如其名,qira 背後其實是用 QEMU 來執行程式。與一般的 debugger 不同的是,它可以做到 無視時間 (timeless debugger)。
一般的 debugger 是只能往後執行的,所以在 rr 等工具出來之前,就只能很痛苦的執行到程式的某位置,然後撞斷點,開始 debug (或拆程式)。
有 rr
的狀況下,就是:
(官網上的例子)
$ rr record /your/application --args
...
FAIL: oh no!
The entire execution, including the failure, was saved to disk. That recording can now be debugged.
$ rr replay
GNU gdb (GDB) ...
...
0x4cee2050 in _start () from /lib/ld-linux.so.2
(gdb)
rr
是指 record-replay
。但可惜的是,它不能倒退嚕。
qira
之所以可以倒退嚕,是因為背後使用 qemu
的機制,在執行時紀錄程式的動向。可以參考 Geohot 在 USENIX 2016 上講的內容。
USENIX Engima 2016 - Timeless Debugging
又因為使用 qemu
的關係,所以可以支持 x86/arm/mips 等平臺。
Timeless Debugging of Complex Software | Ret2 Systems Blog