A Partial Multiverse Model of Time Travel for Debugging
-
Upload
awwaiid -
Category
Technology
-
view
116 -
download
2
description
Transcript of A Partial Multiverse Model of Time Travel for Debugging
![Page 1: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/1.jpg)
For each universethere are a dozen others;one must lack my bug?
![Page 2: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/2.jpg)
A Partial-Multiverse Modelof Time Travelfor Debugging
RubyConf 2014
Brock [email protected]@optoro.com
![Page 3: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/3.jpg)
awwaiid@rbconf:~$ whoami
![Page 4: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/4.jpg)
Debuggers
![Page 5: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/5.jpg)
pry-byebug
![Page 6: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/6.jpg)
How does THAT work‽
![Page 7: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/7.jpg)
Sweet
![Page 8: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/8.jpg)
OK. What could be better?
![Page 9: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/9.jpg)
MAD SCIENCE
![Page 10: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/10.jpg)
pry-timetravel
![Page 11: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/11.jpg)
And we're done!
![Page 12: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/12.jpg)
The Idea
(nothing new under the sun)
![Page 13: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/13.jpg)
fork() the universe during 'next'
![Page 14: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/14.jpg)
Suspend the child fork
![Page 15: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/15.jpg)
Keep track of all created child forks
![Page 16: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/16.jpg)
Upon 'back', grab the most recent child fork
![Page 17: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/17.jpg)
Resume (time-travel!) the previous child fork
![Page 18: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/18.jpg)
Wha?
![Page 19: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/19.jpg)
Two essential ingredients.
![Page 20: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/20.jpg)
Unix fork()
![Page 21: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/21.jpg)
New child process:
new (child) PIDcopy of memoryshare file handles (sockets)... other stuffruns separately
![Page 22: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/22.jpg)
Copy-On-Write!
![Page 23: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/23.jpg)
Signals
![Page 24: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/24.jpg)
Registered OS callbacks
![Page 25: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/25.jpg)
SIGINT
SIGTERM
SIGKILL
SIGHUP
SIGUSR1
SIGALRM
SIGTSTP
![Page 26: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/26.jpg)
SIGINT (^C)
SIGTERM (kill)
SIGKILL (kill -9)
SIGHUP (daemon reload)
SIGUSR1 (... things ...)
SIGALRM (just another 5 minutes!)
![Page 27: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/27.jpg)
Signal handling / sending in Ruby
![Page 28: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/28.jpg)
SIGTSTP (^Z)
SIGSTOP
SIGCONT
![Page 29: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/29.jpg)
![Page 30: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/30.jpg)
def snap if child_pid = fork # I am the parent! Process.kill 'SIGSTOP', $$ else # I am the child! @snap_pid.push child_pid endend
![Page 31: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/31.jpg)
def restore Process.kill 'SIGCONT', @snap_pid[-1] Process.kill 'SIGSTOP', $$end
![Page 32: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/32.jpg)
Limitation:
Shared file handles (inc. sockets!)
![Page 33: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/33.jpg)
Limitation:
External state.
![Page 34: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/34.jpg)
Limitation:
Threads. Not so much.
![Page 35: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/35.jpg)
Limitation:
Can only travel back to checkpoints
(see also: Primer)
![Page 36: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/36.jpg)
Limitation:
Might crash the multiverse throughmemory exhaustion. I guess.
![Page 37: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/37.jpg)
Wrap in a pry pluginand we're done, right?
![Page 38: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/38.jpg)
Complication:
Shell detects STOP
![Page 39: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/39.jpg)
awwaiid@floyd:~$ pry[1] pry(main)>zsh: suspended (signal) pry
![Page 40: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/40.jpg)
Fix:
Make a dummy parent processthat just sleeps (or sig-pause)
![Page 41: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/41.jpg)
Complication:
Killing parent snapshots
![Page 42: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/42.jpg)
Fix:
Let the One True (parent) snapshotkill all of its children (via SIGUSR1).
(also: nope. totally wrong.)
![Page 43: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/43.jpg)
Complication:
Every snapshot wants to clean up
![Page 44: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/44.jpg)
Fix:
If you are not the current snapshot,terminate yourself without cleanup!
![Page 45: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/45.jpg)
Complication:
ZOMBIES
![Page 46: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/46.jpg)
Zombie:
Child process that has exited nicelybut then the parent exited not-nicely.
The process is dead, yet remains.
![Page 47: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/47.jpg)
Great. Now we can go back!
![Page 48: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/48.jpg)
I WANT MOAR
![Page 49: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/49.jpg)
Tree of snapshots
![Page 50: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/50.jpg)
TODO: auto-snapshot
![Page 51: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/51.jpg)
References:
https://github.com/TomOnTime/timetravelpdb
http://programmers.stackexchange.com /questions/181527 /why-is-reverse-debugging-rarely-used
http://debug.elm-lang.org/
![Page 52: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/52.jpg)
If I had the chanceI'd write a better haikuoh wait, I HAVE A TIME MACHINE
![Page 53: A Partial Multiverse Model of Time Travel for Debugging](https://reader033.fdocuments.us/reader033/viewer/2022052909/55978f251a28abc9368b4709/html5/thumbnails/53.jpg)
THE END