wiki:WebKitFlatpakSDK/DebugWithRR

Version 4 (modified by eocanha@igalia.com, 2 months ago) (diff)

--

Debugging with RR

rr is a lightweight tool for recording, replaying and debugging execution of applications (trees of processes and threads). Debugging extends gdb with very efficient reverse-execution, which in combination with standard gdb/x86 features like hardware data watchpoints, makes debugging much more fun.

Using RR with the SDK

The Flatpak SDK already provides RR. You don't need to install it on your host machine. To record a trace, use this command:

$ WEBKIT_MINI_BROWSER_PREFIX=rr Tools/Scripts/run-minibrowser --gtk ...

You don't necessarily need a debug build, but it's better to have one.

To replay a trace or simply run rr:

$ Tools/Scripts/webkit-flatpak -c rr <rr arguments here>
...
$ Tools/Scripts/webkit-flatpak -c rr ps                                                                                                                                                            14:32:37
PID     PPID    EXIT    CMD
35      --      0       /app/webkit/WebKitBuild/Debug/bin/MiniBrowser http://192.168.1.44/test.html
43      35      -5      /app/webkit/WebKitBuild/Debug/bin/WebKitWebProcess 7 24
44      35      0       /app/webkit/WebKitBuild/Debug/bin/WebKitNetworkProcess 8 24

Alternatively, you can run rr from the flatpak shell:

$ Tools/Scripts/webkit-flatpak --gtk ...
[📦🌐🐱 org.webkit.Sdk WebKit]$ rr record /app/webkit/WebKitBuild/Debug/bin/MiniBrowser ...
...
[📦🌐🐱 org.webkit.Sdk WebKit]$ rr ps
...
[📦🌐🐱 org.webkit.Sdk WebKit]$ TEST_RUNNER_TEST_PLUGIN_PATH= rr record /app/webkit/WebKitBuild/Debug/bin/WebKitTestRunner ...
...
[📦🌐🐱 org.webkit.Sdk WebKit]$ rr replay
...

If you want to clear old unused traces, they're stored in ~/.local/share/rr/.