Browse Source

tracing the stack

Simon Van Mierlo 8 years ago
parent
commit
79f8078842

+ 6 - 2
kernel/modelverse_kernel/main.py

@@ -19,7 +19,7 @@ class ModelverseKernel(object):
         self.generators = {}
         self.generators = {}
         self.allow_compiled = True
         self.allow_compiled = True
         #self.allow_compiled = False
         #self.allow_compiled = False
-        self.debug_info = defaultdict(lambda : "(no debug information found)")
+        self.debug_info = defaultdict(lambda: ["None"])
 
 
     def execute_yields(self, username, operation, params, reply):
     def execute_yields(self, username, operation, params, reply):
         try:
         try:
@@ -60,7 +60,7 @@ class ModelverseKernel(object):
                                    ("RV", [self.inst]),
                                    ("RV", [self.inst]),
                                   ]
                                   ]
             if self.new_debug is not None:
             if self.new_debug is not None:
-                self.debug_info[username], = yield [("RV", [self.new_debug])]
+                self.debug_info[username][-1], = yield [("RV", [self.new_debug])]
 
 
             if self.phase_v == "finish":
             if self.phase_v == "finish":
                 gen = self.helper_init(user_root)
                 gen = self.helper_init(user_root)
@@ -148,6 +148,7 @@ class ModelverseKernel(object):
                                ("DE", [lnk]),
                                ("DE", [lnk]),
                                ("DN", [user_frame]),
                                ("DN", [user_frame]),
                               ]
                               ]
+        self.debug_info[self.username].pop()
 
 
     ########################################
     ########################################
     ### Execute input and output methods ###
     ### Execute input and output methods ###
@@ -530,6 +531,7 @@ class ModelverseKernel(object):
         value, =            yield [("RD", [inst, "value"])]
         value, =            yield [("RD", [inst, "value"])]
 
 
         if value is None:
         if value is None:
+            self.debug_info[self.username].pop()
             prev_frame, =   yield [("RD", [user_frame, "prev"])]
             prev_frame, =   yield [("RD", [user_frame, "prev"])]
             if prev_frame is None:
             if prev_frame is None:
                 _, =            yield [("DN", [user_root])]
                 _, =            yield [("DN", [user_root])]
@@ -557,6 +559,7 @@ class ModelverseKernel(object):
                                   ]
                                   ]
 
 
     def return_eval(self, user_root):
     def return_eval(self, user_root):
+        self.debug_info[self.username].pop()
         user_frame, =       yield [("RD", [user_root, "frame"])]
         user_frame, =       yield [("RD", [user_root, "frame"])]
         prev_frame, =       yield [("RD", [user_frame, "prev"])]
         prev_frame, =       yield [("RD", [user_frame, "prev"])]
         returnvalue, old_returnvalue_link = \
         returnvalue, old_returnvalue_link = \
@@ -665,6 +668,7 @@ class ModelverseKernel(object):
                                   ]
                                   ]
 
 
     def call_call(self, user_root):
     def call_call(self, user_root):
+        self.debug_info[self.username].append("None")
         user_frame, =       yield [("RD", [user_root, "frame"])]
         user_frame, =       yield [("RD", [user_root, "frame"])]
         inst, =             yield [("RD", [user_frame, "IP"])]
         inst, =             yield [("RD", [user_frame, "IP"])]
         param, =            yield [("RD", [inst, "last_param"])]
         param, =            yield [("RD", [inst, "last_param"])]

+ 13 - 3
kernel/mvk_server/classes/executor.xml

@@ -6,7 +6,7 @@
         <body>
         <body>
             <![CDATA[
             <![CDATA[
             self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
             self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
-            self.request_queue = [("", "", "load_primitives", [], None)]
+            self.request_queue = [("", "", "load_primitives", [], None, False)]
             self.mvs.GC = True
             self.mvs.GC = True
             self.mvk = ModelverseKernel(self.mvs.read_root()[0])
             self.mvk = ModelverseKernel(self.mvs.read_root()[0])
             self.first = True
             self.first = True
@@ -70,7 +70,17 @@
                         <parameter name="params"/>
                         <parameter name="params"/>
                         <parameter name="request_id"/>
                         <parameter name="request_id"/>
                         <script>
                         <script>
-                            self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id))
+                            self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id, True))
+                        </script>
+                    </transition>
+                    <transition event="execute_debug" target=".">
+                        <parameter name="returnpath"/>
+                        <parameter name="username"/>
+                        <parameter name="operation"/>
+                        <parameter name="params"/>
+                        <parameter name="request_id"/>
+                        <script>
+                            self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id, False))
                         </script>
                         </script>
                     </transition>
                     </transition>
                 </state>
                 </state>
@@ -88,7 +98,7 @@
                             self.mvk.success = True
                             self.mvk.success = True
                             self.first = True
                             self.first = True
 
 
-                            self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
+                            self.returnpath, username, operation, params, self.request_id, self.mvk.allow_compiled = self.request_queue.pop(0)
                             reply = None
                             reply = None
                             commands = []
                             commands = []
                             while 1:
                             while 1:

+ 1 - 1
kernel/mvk_server/classes/user_statechart.xml

@@ -68,7 +68,7 @@
                         <parameter name="source"/>
                         <parameter name="source"/>
                         <parameter name="args"/>
                         <parameter name="args"/>
                         <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
                         <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
-                            <parameter expr="json.dumps({'user': self.username, 'state': 'paused', 'info': self.mvk.debug_info})"/>
+                            <parameter expr="json.dumps({'user': self.username, 'state': 'paused', 'info': self.mvk.debug_info[self.username]})"/>
                         </raise>
                         </raise>
                     </transition>
                     </transition>
                 </state>
                 </state>

+ 17 - 5
kernel/mvk_server/server.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Fri Feb 10 10:24:39 2017
+Date:   Fri Feb 10 11:29:04 2017
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server
@@ -1317,7 +1317,7 @@ class UserStatechart(RuntimeClassBase):
     def _running_execution_executing_0_exec(self, parameters):
     def _running_execution_executing_0_exec(self, parameters):
         source = parameters[0]
         source = parameters[0]
         args = parameters[1]
         args = parameters[1]
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + source, Event("HTTP_input", None, [json.dumps({'user': self.username, 'state': 'paused', 'info': self.mvk.debug_info})])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + source, Event("HTTP_input", None, [json.dumps({'user': self.username, 'state': 'paused', 'info': self.mvk.debug_info[self.username]})])]))
     
     
     def _init_0_exec(self, parameters):
     def _init_0_exec(self, parameters):
         returnpath = parameters[0]
         returnpath = parameters[0]
@@ -1423,7 +1423,7 @@ class Executor(RuntimeClassBase):
     
     
     def user_defined_constructor(self):
     def user_defined_constructor(self):
         self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
         self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
-        self.request_queue = [("", "", "load_primitives", [], None)]
+        self.request_queue = [("", "", "load_primitives", [], None, False)]
         self.mvs.GC = True
         self.mvs.GC = True
         self.mvk = ModelverseKernel(self.mvs.read_root()[0])
         self.mvk = ModelverseKernel(self.mvs.read_root()[0])
         self.first = True
         self.first = True
@@ -1516,6 +1516,10 @@ class Executor(RuntimeClassBase):
         _init_queue_queue_0.setAction(self._init_queue_queue_0_exec)
         _init_queue_queue_0.setAction(self._init_queue_queue_0_exec)
         _init_queue_queue_0.setTrigger(Event("execute", None))
         _init_queue_queue_0.setTrigger(Event("execute", None))
         self.states["/init/queue/queue"].addTransition(_init_queue_queue_0)
         self.states["/init/queue/queue"].addTransition(_init_queue_queue_0)
+        _init_queue_queue_1 = Transition(self, self.states["/init/queue/queue"], [self.states["/init/queue/queue"]])
+        _init_queue_queue_1.setAction(self._init_queue_queue_1_exec)
+        _init_queue_queue_1.setTrigger(Event("execute_debug", None))
+        self.states["/init/queue/queue"].addTransition(_init_queue_queue_1)
         
         
         # transition /init/execute/idle
         # transition /init/execute/idle
         _init_execute_idle_0 = Transition(self, self.states["/init/execute/idle"], [self.states["/init/execute/execution"]])
         _init_execute_idle_0 = Transition(self, self.states["/init/execute/idle"], [self.states["/init/execute/execution"]])
@@ -1539,7 +1543,7 @@ class Executor(RuntimeClassBase):
         self.mvk.success = True
         self.mvk.success = True
         self.first = True
         self.first = True
         
         
-        self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
+        self.returnpath, username, operation, params, self.request_id, self.mvk.allow_compiled = self.request_queue.pop(0)
         reply = None
         reply = None
         commands = []
         commands = []
         while 1:
         while 1:
@@ -1564,7 +1568,15 @@ class Executor(RuntimeClassBase):
         operation = parameters[2]
         operation = parameters[2]
         params = parameters[3]
         params = parameters[3]
         request_id = parameters[4]
         request_id = parameters[4]
-        self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id))
+        self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id, True))
+    
+    def _init_queue_queue_1_exec(self, parameters):
+        returnpath = parameters[0]
+        username = parameters[1]
+        operation = parameters[2]
+        params = parameters[3]
+        request_id = parameters[4]
+        self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id, False))
     
     
     def _init_execute_idle_0_guard(self, parameters):
     def _init_execute_idle_0_guard(self, parameters):
         return self.request_queue
         return self.request_queue

+ 1 - 1
scripts/debug_prompt.py

@@ -42,4 +42,4 @@ while 1:
         local_print("Received quit: breaking connection to Modelverse immediately!")
         local_print("Received quit: breaking connection to Modelverse immediately!")
         break
         break
 
 
-    print (urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": action, "username": username}))).read())
+    print json.loads(urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": action, "username": username}))).read())