[[PageOutline]] == Debugging with RR [https://rr-project.org/ 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: {{{ #!sh $ 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: {{{ #!sh $ Tools/Scripts/webkit-flatpak -c rr ... $ 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: {{{ #!sh $ Tools/Scripts/webkit-flatpak --gtk --debug [📦🌐🐱 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/`.