dump-trace.py adapted to ProtoStream

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1297 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hellwig
2012-06-05 11:34:33 +00:00
parent 15d659500b
commit 18fdd87c8c

View File

@ -5,30 +5,43 @@
import trace_pb2 import trace_pb2
import sys import sys
import struct
if len(sys.argv) != 2: if len(sys.argv) != 2:
print "Usage:", sys.argv[0], "tracefile.pb" print "Usage:", sys.argv[0], "tracefile.pb"
sys.exit(-1) sys.exit(-1)
trace = trace_pb2.Trace() trace_event = trace_pb2.Trace_Event()
# Read trace
try: try:
f = open(sys.argv[1], "rb") f = open(sys.argv[1], "rb")
trace.ParseFromString(f.read())
f.close()
except IOError: except IOError:
print sys.argv[1] + ": Could not open file." print sys.argv[1] + ": Could not open file."
sys.exit(-1) sys.exit(-1)
# This works for any type of pb message: while 1:
#print trace # Read trace length
try:
lengthNO = f.read(4)
if len(lengthNO) == 0:
break
except IOError:
print "Could not read data from file"
# More compact dump for traces: # Read Trace-Event
for event in trace.event: length = struct.unpack('!I', lengthNO)[0]
if not event.HasField("memaddr"): trace_event.ParseFromString(f.read(length))
print "IP {0:x}".format(event.ip)
else: # This works for any type of pb message:
print "MEM {0} {1:x} width {2:d} IP {3:x}".format( #print trace_event
"R" if event.accesstype == trace_pb2.Trace.Event.READ else "W",
event.memaddr, event.width, event.ip) # More compact dump for traces:
if not trace_event.HasField("memaddr"):
print "IP {0:x}".format(trace_event.ip)
else:
print "MEM {0} {1:x} width {2:d} IP {3:x}".format(
"R" if trace_event.accesstype == trace_pb2.Trace_Event.READ else "W",
trace_event.memaddr, trace_event.width, trace_event.ip)
f.close()