diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-24 17:22:03 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-24 17:22:03 +0000 |
commit | 90c3aeddfc61ec297ffe2db3750cdf9cb9764a06 (patch) | |
tree | a4544bb48dfc161dcd3bd1a600a52f0296a0f187 /tools/xenmgr/lib/server/SrvConsoleServer.py | |
parent | 58f6aeb07ba7ffd759ac7ebf0ba7370a51d37d52 (diff) | |
download | xen-90c3aeddfc61ec297ffe2db3750cdf9cb9764a06.tar.gz xen-90c3aeddfc61ec297ffe2db3750cdf9cb9764a06.tar.bz2 xen-90c3aeddfc61ec297ffe2db3750cdf9cb9764a06.zip |
bitkeeper revision 1.1011.1.5 (40db0dbbPeQLwub6SrW6h5ORlAC4SA)
Add trace support to new xend.
Diffstat (limited to 'tools/xenmgr/lib/server/SrvConsoleServer.py')
-rw-r--r-- | tools/xenmgr/lib/server/SrvConsoleServer.py | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/tools/xenmgr/lib/server/SrvConsoleServer.py b/tools/xenmgr/lib/server/SrvConsoleServer.py index 94b7c8e6c8..7a8e4b96d8 100644 --- a/tools/xenmgr/lib/server/SrvConsoleServer.py +++ b/tools/xenmgr/lib/server/SrvConsoleServer.py @@ -8,6 +8,8 @@ import os import os.path import signal import sys +import threading +import linecache import socket import pwd import re @@ -482,7 +484,7 @@ class Daemon: while code > 0: code = os.waitpid(-1, os.WNOHANG) - def start(self): + def start(self,trace=0): if self.cleanup(kill=False): return 1 @@ -506,9 +508,54 @@ class Daemon: # Child logfile = self.open_logfile() self.redirect_output(logfile) + if trace: + self.tracefile = open('/var/log/xend.trace', 'w+', 1) + self.traceindent = 0 + sys.settrace(self.trace) + try: + threading.settrace(self.trace) # Only in Python >= 2.3 + except: + pass self.run() return 0 + def print_trace(self,str): + for i in range(self.traceindent): + self.tracefile.write(" ") + self.tracefile.write(str) + + def trace(self, frame, event, arg): + if event == 'call': + code = frame.f_code + filename = code.co_filename + m = re.search('.*xenmgr/(.*)', code.co_filename) + if not m: + return None + modulename = m.group(1) + if re.search('sxp.py', modulename): + return None + self.traceindent += 1 + self.print_trace("++++ %s:%s\n" + % (modulename, code.co_name)) + elif event == 'line': + filename = frame.f_code.co_filename + lineno = frame.f_lineno + self.print_trace("%4d %s" % + (lineno, linecache.getline(filename, lineno))) + elif event == 'return': + code = frame.f_code + filename = code.co_filename + m = re.search('.*xenmgr/(.*)', code.co_filename) + if not m: + return None + modulename = m.group(1) + self.print_trace("---- %s:%s\n" + % (modulename, code.co_name)) + self.traceindent -= 1 + elif event == 'exception': + pass + return self.trace + def open_logfile(self): if not os.path.exists(CONTROL_DIR): os.makedirs(CONTROL_DIR) |