Initial support for Mozilla rr
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 27 Jul 2018 07:58:24 +0100
changeset 83 101ff2210613
parent 82 f1ff8319d4e6
child 84 74080a37751a
Initial support for Mozilla rr
Make.proto
Make.spec
RR.st
RREvent.st
RRExitEvent.st
RRStartEvent.st
VDBDebuggerApplication.st
VDBUnixReplayServerConsoleApplication.st
abbrev.stc
application/Make.proto
application/VDBStartup.st
application/application.nsi
application/autopackage/default.apspec
application/bc.mak
application/builder/baseline.rbspec
application/builder/package.deps.rake
application/jv_vdb_application.st
application/modules.stx
bc.mak
extensions.st
jv_vdb.st
libInit.cc
--- a/Make.proto	Fri Jul 06 11:19:41 2018 +0100
+++ b/Make.proto	Fri Jul 27 07:58:24 2018 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/stx/goodies/xml/vw -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libtool2 -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/stx/goodies/announcements -I$(INCLUDE_TOP)/stx/goodies/xml/vw -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libtool2 -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -134,6 +134,8 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)RR.$(O) RR.$(C) RR.$(H): RR.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)RREvent.$(O) RREvent.$(C) RREvent.$(H): RREvent.st $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractApplication.$(O) VDBAbstractApplication.$(C) VDBAbstractApplication.$(H): VDBAbstractApplication.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractPresenter.$(O) VDBAbstractPresenter.$(C) VDBAbstractPresenter.$(H): VDBAbstractPresenter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBEvaluator.$(O) VDBEvaluator.$(C) VDBEvaluator.$(H): VDBEvaluator.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -144,6 +146,8 @@
 $(OUTDIR)VDBVirtualMemoryRegion.$(O) VDBVirtualMemoryRegion.$(C) VDBVirtualMemoryRegion.$(H): VDBVirtualMemoryRegion.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VDBWindowsDebuggerConsoleView.$(O) VDBWindowsDebuggerConsoleView.$(C) VDBWindowsDebuggerConsoleView.$(H): VDBWindowsDebuggerConsoleView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextCollector.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg2/TerminalView.$(H) $(STCHDR)
 $(OUTDIR)jv_vdb.$(O) jv_vdb.$(C) jv_vdb.$(H): jv_vdb.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)RRExitEvent.$(O) RRExitEvent.$(C) RRExitEvent.$(H): RRExitEvent.st $(INCLUDE_TOP)/jv/vdb/RREvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)RRStartEvent.$(O) RRStartEvent.$(C) RRStartEvent.$(H): RRStartEvent.st $(INCLUDE_TOP)/jv/vdb/RREvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) VDBAbstractUnixConsoleApplication.$(C) VDBAbstractUnixConsoleApplication.$(H): VDBAbstractUnixConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
@@ -166,10 +170,11 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebugger.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/Make.spec	Fri Jul 06 11:19:41 2018 +0100
+++ b/Make.spec	Fri Jul 27 07:58:24 2018 +0100
@@ -51,6 +51,8 @@
 STCWARNINGS=-warnNonStandard
 
 COMMON_CLASSES= \
+	RR \
+	RREvent \
 	VDBAbstractApplication \
 	VDBAbstractPresenter \
 	VDBEvaluator \
@@ -61,6 +63,8 @@
 	VDBVirtualMemoryRegion \
 	VDBWindowsDebuggerConsoleView \
 	jv_vdb \
+	RRExitEvent \
+	RRStartEvent \
 	VDBAbstractContainer \
 	VDBAbstractListApplication \
 	VDBAbstractUnixConsoleApplication \
@@ -83,6 +87,7 @@
 	VDBTabbingContainer \
 	VDBUnixDebuggerConsoleApplication \
 	VDBUnixInferiorConsoleApplication \
+	VDBUnixReplayServerConsoleApplication \
 	VDBInstructionListApplication \
 	VDBStackApplication \
 	VDBVariableObjectListApplication \
@@ -91,6 +96,8 @@
 
 
 COMMON_OBJS= \
+    $(OUTDIR)RR.$(O) \
+    $(OUTDIR)RREvent.$(O) \
     $(OUTDIR)VDBAbstractApplication.$(O) \
     $(OUTDIR)VDBAbstractPresenter.$(O) \
     $(OUTDIR)VDBEvaluator.$(O) \
@@ -101,6 +108,8 @@
     $(OUTDIR)VDBVirtualMemoryRegion.$(O) \
     $(OUTDIR)VDBWindowsDebuggerConsoleView.$(O) \
     $(OUTDIR)jv_vdb.$(O) \
+    $(OUTDIR)RRExitEvent.$(O) \
+    $(OUTDIR)RRStartEvent.$(O) \
     $(OUTDIR)VDBAbstractContainer.$(O) \
     $(OUTDIR)VDBAbstractListApplication.$(O) \
     $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) \
@@ -123,6 +132,7 @@
     $(OUTDIR)VDBTabbingContainer.$(O) \
     $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
+    $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) \
     $(OUTDIR)VDBInstructionListApplication.$(O) \
     $(OUTDIR)VDBStackApplication.$(O) \
     $(OUTDIR)VDBVariableObjectListApplication.$(O) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RR.st	Fri Jul 27 07:58:24 2018 +0100
@@ -0,0 +1,211 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+Object subclass:#RR
+	instanceVariableNames:'port pty pid announcer'
+	classVariableNames:'RRExecutable RRPort'
+	poolDictionaries:''
+	category:'RR'
+!
+
+!RR class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+!
+
+documentation
+"
+    Class `RR` represents a Smalltalk inteface to
+    Mozilla rr
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        https://rr-project.org/
+
+"
+! !
+
+!RR class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    "/ please change as required (and remove this comment)
+
+    RRExecutable := nil. "/ nil means default
+    RRPort := 9876
+
+    "Modified: / 27-07-2018 / 07:40:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR class methodsFor:'instance creation'!
+
+new
+    "return an initialized instance"
+
+    ^ self basicNew initialize.
+!
+
+replay
+    ^ self new
+
+    "Created: / 26-07-2018 / 16:53:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR class methodsFor:'accessing'!
+
+executable
+    ^ RRExecutable ? (OperatingSystem pathOfCommand:'rr')
+
+    "Created: / 26-07-2018 / 21:55:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+executable: aString
+    RRExecutable := aString
+
+    "Created: / 26-07-2018 / 21:54:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR class methodsFor:'queries'!
+
+available
+    | exe |
+
+    exe := self executable.
+    ^ exe notNil and:[ OperatingSystem canExecuteCommand: exe ]
+
+    "
+    RR available
+    "
+
+    "Created: / 26-07-2018 / 21:56:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR methodsFor:'accessing'!
+
+announcer
+    ^ announcer
+!
+
+consoleInput
+    ^ pty master
+
+    "Created: / 26-07-2018 / 16:56:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+consoleOutput
+    ^ pty master
+
+    "Created: / 26-07-2018 / 16:56:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+port
+    ^ port
+
+    "Created: / 26-07-2018 / 22:11:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
+
+    announcer := Announcer new.
+
+    "Modified: / 31-07-2018 / 08:29:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR methodsFor:'private'!
+
+exited:status 
+    pid := nil.
+    announcer announce:((RRExitEvent new)
+                setRR:self;
+                setStatus:status).
+    pty release.
+    pty := nil.
+    port := nil
+
+    "Created: / 26-07-2018 / 17:03:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-07-2018 / 08:34:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR methodsFor:'queries'!
+
+running
+    "Return true, if RR replay server is running"
+
+    ^ pid notNil
+
+    "Created: / 27-07-2018 / 07:42:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RR methodsFor:'start & stop'!
+
+start
+    | args |
+
+    pty := GDBPTY new.
+    port := RRPort.
+    RRPort := RRPort + 1.
+    args := Array 
+            with:(OperatingSystem pathOfCommand:'rr')
+            with:'replay'
+            with:'-s'
+            with:port printString.
+    Processor 
+        monitor:[
+            pid := OperatingSystem 
+                    exec:args first
+                    withArguments:args
+                    environment:OperatingSystem getEnvironment
+                    fileDescriptors:{
+                            pty slave fileDescriptor.
+                            pty slave fileDescriptor.
+                            pty slave fileDescriptor
+                        }
+                    fork:true
+                    newPgrp:false
+                    inDirectory:Filename currentDirectory
+                    showWindow:false.
+            pid.
+        ]
+        action:[:stat | self exited:stat ].
+    pid isNil ifTrue:[
+        pty close.
+        self error:'Failed to launch gdb'.
+    ].
+    announcer announce:(RRStartEvent new setRR:self)
+!
+
+stop
+    OperatingSystem sendSignal:(OperatingSystem sigTERM) to:pid toGroup:false toAll:false.
+
+    "Created: / 26-07-2018 / 21:23:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+
+RR initialize!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RREvent.st	Fri Jul 27 07:58:24 2018 +0100
@@ -0,0 +1,46 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+Announcement subclass:#RREvent
+	instanceVariableNames:'rr'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'RR'
+!
+
+!RREvent class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!RREvent methodsFor:'accessing'!
+
+rr
+    ^ rr
+! !
+
+!RREvent methodsFor:'initialization'!
+
+setRR: aRR
+    rr := aRR
+
+    "Created: / 31-07-2018 / 08:33:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RRExitEvent.st	Fri Jul 27 07:58:24 2018 +0100
@@ -0,0 +1,46 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+RREvent subclass:#RRExitEvent
+	instanceVariableNames:'status'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'RR'
+!
+
+!RRExitEvent class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!RRExitEvent methodsFor:'accessing'!
+
+status
+    ^ status
+! !
+
+!RRExitEvent methodsFor:'initialization'!
+
+setStatus: anObject
+    status := anObject
+
+    "Created: / 31-07-2018 / 08:33:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RRStartEvent.st	Fri Jul 27 07:58:24 2018 +0100
@@ -0,0 +1,32 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+RREvent subclass:#RRStartEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'RR'
+!
+
+!RRStartEvent class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
--- a/VDBDebuggerApplication.st	Fri Jul 06 11:19:41 2018 +0100
+++ b/VDBDebuggerApplication.st	Fri Jul 27 07:58:24 2018 +0100
@@ -449,19 +449,32 @@
         (
          (MenuItem
             label: 'File'
+            isVisible: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Open Executable'
                   itemValue: doOpenExecutable
+                  isVisible: true
                 )
                (MenuItem
                   label: '-'
                 )
                (MenuItem
+                  enabled: canAttachToRR
+                  label: 'Attach to Replay Server'
+                  itemValue: doAttachToRR
+                  isVisible: true
+                )
+               (MenuItem
+                  label: '-'
+                  isVisible: true
+                )
+               (MenuItem
                   label: 'Quit'
                   itemValue: doQuit
+                  isVisible: true
                 )
                )
               nil
@@ -470,45 +483,54 @@
           )
          (MenuItem
             label: 'Run'
+            isVisible: true
             submenuChannel: execMenu
           )
          (MenuItem
             label: 'View'
+            isVisible: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Stack'
                   itemValue: doOpenToolApplicationClass:
+                  isVisible: true
                   argument: VDBStackApplication
                 )
                (MenuItem
                   label: 'Frame'
                   itemValue: doOpenToolApplicationClass:
+                  isVisible: true
                   argument: VDBFrameApplication
                 )
                (MenuItem
                   label: 'Breakpoints'
                   itemValue: doOpenToolApplicationClass:
+                  isVisible: true
                   argument: VDBBreakpointListApplication
                 )
                (MenuItem
                   label: 'Memory'
                   itemValue: doOpenToolApplicationClass:
+                  isVisible: true
                   argument: VDBMemoryApplication
                 )
                (MenuItem
                   label: '-'
+                  isVisible: true
                 )
                (MenuItem
                   enabled: canViewEnableFrameFilters
                   label: 'Enable Frame Filters'
                   itemValue: doViewEnableFrameFilters
+                  isVisible: true
                 )
                (MenuItem
                   enabled: canViewEnablePrettyPrinting
                   label: 'Enable Pretty Printing'
                   itemValue: doViewEnablePrettyPrinting
+                  isVisible: true
                 )
                )
               nil
@@ -518,27 +540,33 @@
          (MenuItem
             label: 'Debug'
             startGroup: right
+            isVisible: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Inspect Debugger'
                   itemValue: doInspectDebugger
+                  isVisible: true
                 )
                (MenuItem
                   label: 'Inspect Session Record'
                   itemValue: doInspectSessionRecord
+                  isVisible: true
                 )
                (MenuItem
                   label: '-'
+                  isVisible: true
                 )
                (MenuItem
                   label: 'Reopen'
                   itemValue: doDebugReopenDebugger
+                  isVisible: true
                 )
                (MenuItem
                   label: 'Launcher'
                   itemValue: doDebugReopenLauncher
+                  isVisible: true
                 )
                )
               nil
@@ -549,8 +577,6 @@
         nil
         nil
       )
-
-    "Modified: / 14-03-2018 / 09:46:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 toolbarMenu
@@ -942,6 +968,17 @@
     "Modified: / 02-02-2018 / 21:02:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+onRRExitEvent: anRRExitEvent
+    anRRExitEvent rr announcer unsubscribe: self.
+
+    "Created: / 03-08-2018 / 13:29:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onRRStartEvent: anRRStartEvent
+
+    "Created: / 03-08-2018 / 13:38:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 onRunningEvent: aGDBStoppedEvent
     self updateButtonEnablements
 
@@ -1028,6 +1065,26 @@
 
 !VDBDebuggerApplication methodsFor:'menu actions'!
 
+doAttachToRR
+    self doAttachToRR: RR replay.
+
+    "Modified: / 03-08-2018 / 13:33:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doAttachToRR: rr
+    rr announcer
+        when: RRStartEvent send: #onRRStartEvent: to: self;
+        when: RRExitEvent send: #onRRExitEvent: to: self.
+    rr start.
+    (VDBUnixReplayServerConsoleApplication new)
+        debugger:debugger;
+        rr:rr;
+        open.
+    debugger targetConnectRR:rr.
+
+    "Created: / 03-08-2018 / 13:33:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 doDebugReopenDebugger
     | d |
 
@@ -1156,6 +1213,12 @@
 
 !VDBDebuggerApplication methodsFor:'menu apects'!
 
+canAttachToRR
+    ^ RR available
+
+    "Modified: / 26-07-2018 / 22:00:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 canViewEnableFrameFilters
     ^ [ debugger isFrameFiltersEnabled not ]
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBUnixReplayServerConsoleApplication.st	Fri Jul 27 07:58:24 2018 +0100
@@ -0,0 +1,229 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractUnixConsoleApplication subclass:#VDBUnixReplayServerConsoleApplication
+	instanceVariableNames:'rrHolder rr'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-UI-Console-Unix'
+!
+
+!VDBUnixReplayServerConsoleApplication class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBUnixReplayServerConsoleApplication class methodsFor:'accessing'!
+
+windowTitle
+    ^ 'Replay Console'
+
+    "Created: / 26-07-2018 / 17:12:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'accessing'!
+
+consoleInput
+    "superclass VDBAbstractConsoleApplication says that I am responsible to implement this method"
+
+    ^ rr consoleInput
+
+    "Modified: / 26-07-2018 / 17:14:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+consoleOutput
+    "superclass VDBAbstractConsoleApplication says that I am responsible to implement this method"
+
+    ^ rr consoleOutput
+
+    "Modified: / 26-07-2018 / 17:14:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'acessing'!
+
+rr
+    ^ rr
+
+    "Created: / 26-07-2018 / 17:17:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+rr: aRR
+    self rrHolder value: aRR
+
+    "Created: / 26-07-2018 / 17:17:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'aspects'!
+
+consoleView
+    consoleView isNil ifTrue:[ 
+        consoleView :=VT100TerminalView new.
+        consoleView foregroundColor: Color white
+                    backgroundColor: Color black;
+                    cursorForegroundColor: Color white
+                          backgroundColor: Color white.
+        rr notNil ifTrue:[ 
+            consoleView inStream: self consoleInput.
+            consoleView outStream: self consoleOutput.
+            consoleView startReaderProcessWhenVisible.
+        ].
+    ].
+    ^ consoleView
+
+    "Created: / 26-07-2018 / 20:27:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+rrHolder
+    "return/create the 'debuggerHolder' value holder (automatically generated)"
+
+    rrHolder isNil ifTrue:[
+        rrHolder := ValueHolder new.
+        rrHolder addDependent:self.
+    ].
+    ^ rrHolder
+
+    "Created: / 26-07-2018 / 17:17:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+rrHolder:aValueModel
+    "set the 'debuggerHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    rrHolder notNil ifTrue:[
+        oldValue := rrHolder value.
+        rrHolder removeDependent:self.
+    ].
+    rrHolder := aValueModel.
+    rrHolder notNil ifTrue:[
+        rrHolder addDependent:self.
+    ].
+    newValue := rrHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:rrHolder.
+    ].
+
+    "Created: / 26-07-2018 / 17:18:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    changedObject == rrHolder ifTrue:[
+        rrHolder value == rr ifFalse:[
+            rr notNil ifTrue:[ 
+                self unsubscribe.
+            ].
+            rr := rrHolder value.
+            rr notNil ifTrue:[ 
+                self subscribe.
+            ].
+        ].
+        ^ self.
+    ].
+    super update:something with:aParameter from:changedObject
+
+    "Created: / 26-07-2018 / 17:19:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'event handling'!
+
+onRRExitEvent: anRRTerminaedEvent
+    consoleView notNil ifTrue:[
+        | status info |
+        status := anRRTerminaedEvent status.
+        consoleView cr.
+        (status success or:[status status == #signal and:[status code == UnixOperatingSystem sigTERM]]) ifTrue:[ 
+            info := resources string: '>> replay server terminated'
+        ] ifFalse:[status isError ifTrue:[
+            info := resources string: '>> replay server terminated (with status %1)' with: anRRTerminaedEvent status code.
+        ] ifFalse:[status status == #signal ifTrue:[ 
+            info := resources string: '>> replay server crashed (signal %1)' with: anRRTerminaedEvent status code.    
+        ]]].
+        consoleView nextPutLine: (info asText allBold colorizeAllWith:Color red).
+    ].
+
+    "Created: / 31-07-2018 / 08:52:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onRRStartEvent: anRRStartedEvent
+
+    "Created: / 31-07-2018 / 08:52:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'initialization & release'!
+
+subscribe
+    "Register for debugger events. To be overrided by subclasses"
+    
+    super subscribe.
+    rr notNil ifTrue:[
+        (rr announcer)
+            when:RRStartEvent
+                send:#onRRStartEvent:
+                to:self;
+            when:RRExitEvent
+                send:#onRRExitEvent:
+                to:self.
+        consoleView notNil ifTrue:[
+            consoleView stopReaderProcess.
+            consoleView inStream:self consoleInput.
+            consoleView outStream:self consoleOutput.
+            consoleView startReaderProcessWhenVisible.
+        ].
+    ].
+
+    "Created: / 26-07-2018 / 17:19:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-07-2018 / 08:53:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unsubscribe
+    "Unsubscribe myself fo debugger events"
+
+    super unsubscribe.
+    rr notNil ifTrue:[ 
+        rr announcer unsubscribe: self. 
+    ].
+    consoleView notNil ifTrue:[ 
+        consoleView stopReaderProcess.
+        consoleView inStream: nil.
+        consoleView outStream: nil.
+    ].
+
+    "Created: / 26-07-2018 / 17:20:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-07-2018 / 08:38:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBUnixReplayServerConsoleApplication methodsFor:'startup & release'!
+
+closeRequest
+    (rr notNil and:[ rr running ]) ifTrue:[ 
+        (Dialog confirm: (resources string: 'Replay Server is running. Stop server and close?')) ifFalse:[ 
+            ^ self.
+        ].
+        rr stop.
+    ].
+    ^ super closeRequest.
+
+    "Created: / 27-07-2018 / 07:49:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/abbrev.stc	Fri Jul 06 11:19:41 2018 +0100
+++ b/abbrev.stc	Fri Jul 27 07:58:24 2018 +0100
@@ -1,6 +1,8 @@
 # automagically generated by the project definition
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
+RR RR jv:vdb 'RR' 0
+RREvent RREvent jv:vdb 'RR' 0
 VDBAbstractApplication VDBAbstractApplication jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractPresenter VDBAbstractPresenter jv:vdb 'VDB-Presentation' 0
 VDBEvaluator VDBEvaluator jv:vdb 'VDB-Tools' 0
@@ -11,6 +13,8 @@
 VDBVirtualMemoryRegion VDBVirtualMemoryRegion jv:vdb 'VDB-Tools' 0
 VDBWindowsDebuggerConsoleView VDBWindowsDebuggerConsoleView jv:vdb 'VDB-UI-Console-Windows' 2
 jv_vdb jv_vdb jv:vdb '* Projects & Packages *' 3
+RRExitEvent RRExitEvent jv:vdb 'RR' 0
+RRStartEvent RRStartEvent jv:vdb 'RR' 0
 VDBAbstractContainer VDBAbstractContainer jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractListApplication VDBAbstractListApplication jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractUnixConsoleApplication VDBAbstractUnixConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
@@ -33,6 +37,7 @@
 VDBTabbingContainer VDBTabbingContainer jv:vdb 'VDB-UI-Containers' 2
 VDBUnixDebuggerConsoleApplication VDBUnixDebuggerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBUnixInferiorConsoleApplication VDBUnixInferiorConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
+VDBUnixReplayServerConsoleApplication VDBUnixReplayServerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBInstructionListApplication VDBInstructionListApplication jv:vdb 'VDB-UI-Others' 2
 VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
 VDBVariableObjectListApplication VDBVariableObjectListApplication jv:vdb 'VDB-UI-Others' 2
--- a/application/Make.proto	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/Make.proto	Fri Jul 27 07:58:24 2018 +0100
@@ -69,6 +69,7 @@
  libstx_libview \
  libstx_libui \
  libstx_libview2 \
+ libstx_goodies_sunit \
  libstx_libwidg \
  libstx_goodies_magritte \
  libstx_libhtml \
@@ -91,6 +92,7 @@
  $(TOP)/libview/libstx_libview$(O_EXT) \
  $(TOP)/libui/libstx_libui$(O_EXT) \
  $(TOP)/libview2/libstx_libview2$(O_EXT) \
+ $(TOP)/goodies/sunit/libstx_goodies_sunit$(O_EXT) \
  $(TOP)/libwidg/libstx_libwidg$(O_EXT) \
  $(TOP)/goodies/magritte/libstx_goodies_magritte$(O_EXT) \
  $(TOP)/libhtml/libstx_libhtml$(O_EXT) \
@@ -113,6 +115,7 @@
  libstx_libview$(O_EXT) \
  libstx_libui$(O_EXT) \
  libstx_libview2$(O_EXT) \
+ libstx_goodies_sunit$(O_EXT) \
  libstx_libwidg$(O_EXT) \
  libstx_goodies_magritte$(O_EXT) \
  libstx_libhtml$(O_EXT) \
@@ -437,6 +440,19 @@
 $(TOP)/libview2/makefile: $(TOP)/libview2/Make.proto
 	$(TOP)/rules/stmkmf --cd $(TOP)/libview2
 
+libstx_goodies_sunit.so: $(TOP)/goodies/sunit/libstx_goodies_sunit.so
+	ln -sf $(TOP)/goodies/sunit/libstx_goodies_sunit.so .
+
+$(TOP)/goodies/sunit/libstx_goodies_sunit.so: $(TOP)/goodies/sunit/makefile $(FORCE)
+	@if [ -f "$(TOP)/goodies/sunit/.NOSOURCE" ]; then \
+	    echo "skip make in $(TOP)/goodies/sunit (no source)"; \
+	else \
+	    cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "; \
+	fi
+
+$(TOP)/goodies/sunit/makefile: $(TOP)/goodies/sunit/Make.proto
+	$(TOP)/rules/stmkmf --cd $(TOP)/goodies/sunit
+
 libstx_libwidg.so: $(TOP)/libwidg/libstx_libwidg.so
 	ln -sf $(TOP)/libwidg/libstx_libwidg.so .
 
--- a/application/VDBStartup.st	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/VDBStartup.st	Fri Jul 27 07:58:24 2018 +0100
@@ -90,9 +90,12 @@
 main:argv
     "Application entry point. `argv` is the array of command arguments (as Array of Strings)"
 
-    | optparser positional settingsFile settingsSuppressed programExecutable programArgs programPid attach debugger |
+    | optparser positional settingsFile settingsSuppressed replay 
+      programExecutable programArgs programPid attach 
+      debugger debuggerApp |
 
     settingsSuppressed := false.
+    replay := false.
     attach := false.
 
     "/ Parse options...
@@ -116,6 +119,9 @@
                     on: #('--no-preferences') do:[
                         settingsSuppressed := true
                     ];
+                    on: #('--replay') do:[
+                        replay := true
+                    ];
                     yourself.
     [
         positional := optparser parse:argv.
@@ -145,6 +151,15 @@
         UserPreferences setCurrent: settings.
     ].
 
+    replay ifTrue:[ 
+        OperatingSystem isLinuxLike ifFalse:[ 
+            self error: 'replay not supported on this platform'.
+        ].
+        RR available ifFalse:[ 
+            self error: 'cannot replay because rr not available'
+        ].
+    ].
+
     "/ Parse positional arguments - there are two forms:
     "/
     "/   vdb [OPTIONS] [PROGRAM [ARGS]]
@@ -156,21 +171,34 @@
     positional notEmpty ifTrue:[
         programExecutable := positional first.
         programExecutable asFilename exists ifFalse:[
-            programExecutable := OperatingSystem pathOfCommand: programExecutable.
+            "Try to find the executable in PATH..."
+
+            | path |
+
+            path := OperatingSystem pathOfCommand: programExecutable.
+            path notNil ifTrue:[
+                programExecutable := path.
+            ].
         ].
         programPid := Integer fromString: positional first onError: [ nil ].
         programArgs := positional copyFrom: 2.
 
-        "/ If * programExecutable does not exists
-        "/    * AND programPid is not nil (i.e., first positional argument can be converted to an integer)
-        "/    * AND programArguments are empty
-        "/ then interpret positional argument as PID and attach to it.
-        "/ Otherwise, interpret positional arguments
-        (programExecutable asFilename exists not and: [ programPid notNil and: [ programArgs isEmpty ]]) ifTrue:[
-            attach := true.
+        replay ifTrue:[ 
+            programArgs notEmptyOrNil ifTrue:[ 
+                self error: 'cannot specify program args when replaying'.
+            ].
         ] ifFalse:[
-            programExecutable asFilename exists ifFalse:[
-                self error: 'cannot find program executable: ', programExecutable.
+            "/ If * programExecutable does not exists
+            "/    * AND programPid is not nil (i.e., first positional argument can be converted to an integer)
+            "/    * AND programArguments are empty
+            "/ then interpret positional argument as PID and attach to it.
+            "/ Otherwise, interpret positional arguments
+            (programExecutable asFilename exists not and: [ programPid notNil and: [ programArgs isEmpty ]]) ifTrue:[
+                attach := true.
+            ] ifFalse:[
+                programExecutable asFilename exists ifFalse:[
+                    self error: 'cannot find program executable: ', programExecutable.
+                ].
             ].
         ].
     ].
@@ -187,7 +215,12 @@
         ].
     ].
     Smalltalk openDisplay.
-    VDBDebuggerApplication openFor: debugger.
+    debuggerApp := VDBDebuggerApplication new.
+    debuggerApp debugger: debugger.
+    debuggerApp open.
+    replay ifTrue:[ 
+        debuggerApp doAttachToRR
+    ]. 
 
     "
         VDBStartup main: #()
@@ -195,7 +228,7 @@
         VDBStartup main: #('/bin/ls' '/tmp')
     "
 
-    "Modified: / 13-09-2017 / 12:54:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-07-2018 / 08:51:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 usage
@@ -204,6 +237,7 @@
                                                                           "|"
     Stdout nextPutLine:'
 options:
+ --replay ..................... replay last rr record
  --preference FILE ............ read user settings from FILE
  --no-preferences ............. do not read user settings at all
  --help ....................... output this message
@@ -211,7 +245,7 @@
 
     Smalltalk exitIfStandalone: 0.
 
-    "Modified: / 13-09-2017 / 22:12:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-07-2018 / 08:55:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBStartup class methodsFor:'documentation'!
--- a/application/application.nsi	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/application.nsi	Fri Jul 27 07:58:24 2018 +0100
@@ -3,7 +3,7 @@
 
 !define PRODUCT_NAME "Visual / VM Debugger"
 !define PRODUCT_FILENAME "Visual___VM_Debugger"
-!define PRODUCT_VERSION "8.0.0.0"
+!define PRODUCT_VERSION "8.0.99.0"
 !define PRODUCT_PUBLISHER "Jan Vrany"
 !define PRODUCT_WEB_SITE "http://www.yoursite.com"
 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_FILENAME}"
--- a/application/autopackage/default.apspec	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/autopackage/default.apspec	Fri Jul 27 07:58:24 2018 +0100
@@ -1,7 +1,7 @@
 # -*- shell-script -*-
 [Meta]
 ShortName: vdb.do
-SoftwareVersion: 8.0.0.0
+SoftwareVersion: 8.0.99.0
 DisplayName: Visual / VM Debugger
 RootName: Visual / VM Debugger
 Summary: Visual / VM Debugger
--- a/application/bc.mak	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/bc.mak	Fri Jul 27 07:58:24 2018 +0100
@@ -96,6 +96,7 @@
  libstx_libview.dll \
  libstx_libui.dll \
  libstx_libview2.dll \
+ libstx_goodies_sunit.dll \
  libstx_libwidg.dll \
  libstx_goodies_magritte.dll \
  libstx_libhtml.dll \
@@ -366,6 +367,12 @@
 ..\..\..\stx\libview2\$(OBJDIR)\libstx_libview2.dll: $(FORCE)
 	pushd ..\..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
+libstx_goodies_sunit.dll: ..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll
+	copy ..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll *.*
+
+..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll: $(FORCE)
+	pushd ..\..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
 libstx_libwidg.dll: ..\..\..\stx\libwidg\$(OBJDIR)\libstx_libwidg.dll
 	copy ..\..\..\stx\libwidg\$(OBJDIR)\libstx_libwidg.dll *.*
 
--- a/application/builder/baseline.rbspec	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/builder/baseline.rbspec	Fri Jul 27 07:58:24 2018 +0100
@@ -24,6 +24,7 @@
   package "stx:libview"
   package "stx:libui"
   package "stx:libview2"
+  package "stx:goodies/sunit"
   package "stx:libwidg"
   package "stx:goodies/magritte"
   package "stx:libhtml"
--- a/application/builder/package.deps.rake	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/builder/package.deps.rake	Fri Jul 27 07:58:24 2018 +0100
@@ -7,6 +7,7 @@
 task "jv:libgdbs" => "stx:libbasic"
 
 task "jv:vdb" => "jv:libgdbs"
+task "jv:vdb" => "stx:goodies/announcements"
 task "jv:vdb" => "stx:libbasic"
 task "jv:vdb" => "stx:libtool"
 task "jv:vdb" => "stx:libview"
@@ -21,6 +22,9 @@
 
 task "stx:goodies/regex" => "stx:libbasic"
 
+task "stx:goodies/sunit" => "stx:libbasic"
+task "stx:goodies/sunit" => "stx:libview2"
+
 task "stx:goodies/xml/vw" => "stx:libbasic"
 
 
@@ -84,6 +88,7 @@
 task "jv:vdb/application" => "stx:goodies/magritte"
 task "jv:vdb/application" => "stx:goodies/refactoryBrowser/parser"
 task "jv:vdb/application" => "stx:goodies/regex"
+task "jv:vdb/application" => "stx:goodies/sunit"
 task "jv:vdb/application" => "stx:goodies/xml/vw"
 task "jv:vdb/application" => "stx:libbasic"
 task "jv:vdb/application" => "stx:libbasic2"
--- a/application/jv_vdb_application.st	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/jv_vdb_application.st	Fri Jul 27 07:58:24 2018 +0100
@@ -97,7 +97,7 @@
 
     ^ #(
         #'jv:libgdbs'    "GDBDebugger - referenced by VDBStartup class>>main:"
-        #'jv:vdb'    "VDBDebuggerApplication - referenced by VDBStartup class>>main:"
+        #'jv:vdb'    "RR - referenced by VDBStartup class>>main:"
         #'stx:libbasic2'    "UUID - referenced by VDBStartup class>>applicationUUID"
         #'stx:libtool'    "DebugView - referenced by VDBStartup class>>main:"
     )
--- a/application/modules.stx	Fri Jul 06 11:19:41 2018 +0100
+++ b/application/modules.stx	Fri Jul 27 07:58:24 2018 +0100
@@ -25,6 +25,7 @@
 libstx_libview
 libstx_libui
 libstx_libview2
+libstx_goodies_sunit
 libstx_libwidg
 libstx_goodies_magritte
 libstx_libhtml
--- a/bc.mak	Fri Jul 06 11:19:41 2018 +0100
+++ b/bc.mak	Fri Jul 27 07:58:24 2018 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\stx\goodies\xml\vw -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libtool2 -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\stx\goodies\announcements -I$(INCLUDE_TOP)\stx\goodies\xml\vw -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libtool2 -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -81,6 +81,8 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)RR.$(O) RR.$(C) RR.$(H): RR.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)RREvent.$(O) RREvent.$(C) RREvent.$(H): RREvent.st $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractApplication.$(O) VDBAbstractApplication.$(C) VDBAbstractApplication.$(H): VDBAbstractApplication.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractPresenter.$(O) VDBAbstractPresenter.$(C) VDBAbstractPresenter.$(H): VDBAbstractPresenter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBEvaluator.$(O) VDBEvaluator.$(C) VDBEvaluator.$(H): VDBEvaluator.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -91,6 +93,8 @@
 $(OUTDIR)VDBVirtualMemoryRegion.$(O) VDBVirtualMemoryRegion.$(C) VDBVirtualMemoryRegion.$(H): VDBVirtualMemoryRegion.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VDBWindowsDebuggerConsoleView.$(O) VDBWindowsDebuggerConsoleView.$(C) VDBWindowsDebuggerConsoleView.$(H): VDBWindowsDebuggerConsoleView.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextCollector.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg2\TerminalView.$(H) $(STCHDR)
 $(OUTDIR)jv_vdb.$(O) jv_vdb.$(C) jv_vdb.$(H): jv_vdb.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)RRExitEvent.$(O) RRExitEvent.$(C) RRExitEvent.$(H): RRExitEvent.st $(INCLUDE_TOP)\jv\vdb\RREvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)RRStartEvent.$(O) RRStartEvent.$(C) RRStartEvent.$(H): RRStartEvent.st $(INCLUDE_TOP)\jv\vdb\RREvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) VDBAbstractUnixConsoleApplication.$(C) VDBAbstractUnixConsoleApplication.$(H): VDBAbstractUnixConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
@@ -113,10 +117,11 @@
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebugger.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/extensions.st	Fri Jul 06 11:19:41 2018 +0100
+++ b/extensions.st	Fri Jul 27 07:58:24 2018 +0100
@@ -1,5 +1,36 @@
 "{ Package: 'jv:vdb' }"!
 
+!GDBDebugger methodsFor:'event handling'!
+
+onRRExitEvent:anRRExitEvent
+    | status |
+
+    anRRExitEvent rr announcer unsubscribe: self.
+    status := anRRExitEvent status.
+    (status success or:[ status status == #signal and:[status code == OperatingSystem sigTERM ]]) ifFalse:[ 
+        Dialog warn: (self class classResources string: 'Replay server terminated with error')
+    ].
+
+    "Created: / 31-07-2018 / 09:37:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBDebugger methodsFor:'commands - API'!
+
+targetConnectRR: rr
+    "Connect to rr replay server"
+
+    "/ rr suggest to connect as follows:
+    "/ 
+    "/     gdb '-l' '10000' '-ex' 'set sysroot /' '-ex' 'target extended-remote 127.0.0.1:9876' ...
+    "/
+    self send: (GDBMI_gdb_set arguments: #('sysroot' '/')).
+    self targetConnect: 'extended-remote'  parameters: (Array with: '127.0.0.1:' with: rr port).
+    rr announcer when: RRExitEvent send: #onRRExitEvent: to: self.
+
+    "Created: / 26-07-2018 / 21:48:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-07-2018 / 09:38:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBVariableObject methodsFor:'inspecting'!
 
 inspector2TabVariable
--- a/jv_vdb.st	Fri Jul 06 11:19:41 2018 +0100
+++ b/jv_vdb.st	Fri Jul 27 07:58:24 2018 +0100
@@ -52,6 +52,7 @@
 
     ^ #(
         #'jv:libgdbs'    "GDBCommandStatus - shared pool used by VDBWindowsDebuggerConsoleApplication"
+        #'stx:goodies/announcements'    "Announcement - superclass of RREvent"
         #'stx:libbasic'    "Collection - extended"
         #'stx:libtool'    "AbstractSettingsApplication - superclass of VDBSettingsApplication"
         #'stx:libview'    "DisplaySurface - superclass of VDBWindowsDebuggerConsoleView"
@@ -99,6 +100,8 @@
 
     ^ #(
         "<className> or (<className> attributes...) in load order"
+        RR
+        RREvent
         VDBAbstractApplication
         VDBAbstractPresenter
         VDBEvaluator
@@ -109,6 +112,8 @@
         VDBVirtualMemoryRegion
         VDBWindowsDebuggerConsoleView
         #'jv_vdb'
+        RRExitEvent
+        RRStartEvent
         VDBAbstractContainer
         VDBAbstractListApplication
         VDBAbstractUnixConsoleApplication
@@ -131,6 +136,7 @@
         VDBTabbingContainer
         VDBUnixDebuggerConsoleApplication
         VDBUnixInferiorConsoleApplication
+        VDBUnixReplayServerConsoleApplication
         VDBInstructionListApplication
         VDBStackApplication
         VDBVariableObjectListApplication
@@ -149,6 +155,8 @@
         UserPreferences vdbFrameFiltersEnabled:
         UserPreferences vdbPrettyPrintingEnabled
         UserPreferences vdbPrettyPrintingEnabled:
+        GDBDebugger targetConnectRR:
+        GDBDebugger onRRExitEvent:
     )
 ! !
 
--- a/libInit.cc	Fri Jul 06 11:19:41 2018 +0100
+++ b/libInit.cc	Fri Jul 27 07:58:24 2018 +0100
@@ -16,6 +16,8 @@
 DLL_EXPORT void _libjv_vdb_InitDefinition() INIT_TEXT_SECTION;
 #endif
 
+extern void _RR_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _RREvent_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBEvaluator_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -26,6 +28,8 @@
 extern void _VDBVirtualMemoryRegion_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBWindowsDebuggerConsoleView_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _jv_137vdb_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _RRExitEvent_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _RRStartEvent_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractUnixConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -48,6 +52,7 @@
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBUnixReplayServerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBVariableObjectListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -65,6 +70,8 @@
 void _libjv_vdb_Init(int pass, struct __vmData__ *__pRT__, OBJ snd)
 {
   __BEGIN_PACKAGE2__("libjv_vdb", _libjv_vdb_Init, "jv:vdb");
+    _RR_Init(pass,__pRT__,snd);
+    _RREvent_Init(pass,__pRT__,snd);
     _VDBAbstractApplication_Init(pass,__pRT__,snd);
     _VDBAbstractPresenter_Init(pass,__pRT__,snd);
     _VDBEvaluator_Init(pass,__pRT__,snd);
@@ -75,6 +82,8 @@
     _VDBVirtualMemoryRegion_Init(pass,__pRT__,snd);
     _VDBWindowsDebuggerConsoleView_Init(pass,__pRT__,snd);
     _jv_137vdb_Init(pass,__pRT__,snd);
+    _RRExitEvent_Init(pass,__pRT__,snd);
+    _RRStartEvent_Init(pass,__pRT__,snd);
     _VDBAbstractContainer_Init(pass,__pRT__,snd);
     _VDBAbstractListApplication_Init(pass,__pRT__,snd);
     _VDBAbstractUnixConsoleApplication_Init(pass,__pRT__,snd);
@@ -97,6 +106,7 @@
     _VDBTabbingContainer_Init(pass,__pRT__,snd);
     _VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
+    _VDBUnixReplayServerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBInstructionListApplication_Init(pass,__pRT__,snd);
     _VDBStackApplication_Init(pass,__pRT__,snd);
     _VDBVariableObjectListApplication_Init(pass,__pRT__,snd);