Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(248)

Side by Side Diff: tools/grokdump.py

Issue 943573002: Minor tools/grokdump improvements (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2012 the V8 project authors. All rights reserved. 3 # Copyright 2012 the V8 project authors. All rights reserved.
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 self.map = map 963 self.map = map
964 self.address = address 964 self.address = address
965 965
966 def Is(self, cls): 966 def Is(self, cls):
967 return isinstance(self, cls) 967 return isinstance(self, cls)
968 968
969 def Print(self, p): 969 def Print(self, p):
970 p.Print(str(self)) 970 p.Print(str(self))
971 971
972 def __str__(self): 972 def __str__(self):
973 instance_type = "???"
974 if self.map is not None:
975 instance_type = INSTANCE_TYPES[self.map.instance_type]
973 return "HeapObject(%s, %s)" % (self.heap.reader.FormatIntPtr(self.address), 976 return "HeapObject(%s, %s)" % (self.heap.reader.FormatIntPtr(self.address),
974 INSTANCE_TYPES[self.map.instance_type]) 977 instance_type)
975 978
976 def ObjectField(self, offset): 979 def ObjectField(self, offset):
977 field_value = self.heap.reader.ReadUIntPtr(self.address + offset) 980 field_value = self.heap.reader.ReadUIntPtr(self.address + offset)
978 return self.heap.FindObjectOrSmi(field_value) 981 return self.heap.FindObjectOrSmi(field_value)
979 982
980 def SmiField(self, offset): 983 def SmiField(self, offset):
981 field_value = self.heap.reader.ReadUIntPtr(self.address + offset) 984 field_value = self.heap.reader.ReadUIntPtr(self.address + offset)
982 if (field_value & 1) == 0: 985 if (field_value & 1) == 0:
983 return field_value / 2 986 return field_value / 2
984 return None 987 return None
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 p.Print("code:") 1382 p.Print("code:")
1380 self.code.Print(p) 1383 self.code.Print(p)
1381 if self.code != self.shared.code: 1384 if self.code != self.shared.code:
1382 p.Print("unoptimized code:") 1385 p.Print("unoptimized code:")
1383 self.shared.code.Print(p) 1386 self.shared.code.Print(p)
1384 p.Dedent() 1387 p.Dedent()
1385 p.Print("}") 1388 p.Print("}")
1386 1389
1387 def __str__(self): 1390 def __str__(self):
1388 inferred_name = "" 1391 inferred_name = ""
1389 if self.shared.Is(SharedFunctionInfo): 1392 if self.shared is not None and self.shared.Is(SharedFunctionInfo):
1390 inferred_name = self.shared.inferred_name 1393 inferred_name = self.shared.inferred_name
1391 return "JSFunction(%s, %s)" % \ 1394 return "JSFunction(%s, %s) " % \
1392 (self.heap.reader.FormatIntPtr(self.address), inferred_name) 1395 (self.heap.reader.FormatIntPtr(self.address), inferred_name)
1393 1396
1394 def _GetSource(self): 1397 def _GetSource(self):
1395 source = "?source?" 1398 source = "?source?"
1396 start = self.shared.start_position 1399 start = self.shared.start_position
1397 end = self.shared.end_position 1400 end = self.shared.end_position
1398 if not self.shared.script.Is(Script): return source 1401 if not self.shared.script.Is(Script): return source
1399 script_source = self.shared.script.source 1402 script_source = self.shared.script.source
1400 if not script_source.Is(String): return source 1403 if not script_source.Is(String): return source
1401 if start and end: 1404 if start and end:
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
2087 else: 2090 else:
2088 self.send_error(404,'File Not Found: %s' % self.path) 2091 self.send_error(404,'File Not Found: %s' % self.path)
2089 2092
2090 except IOError: 2093 except IOError:
2091 self.send_error(404,'File Not Found: %s' % self.path) 2094 self.send_error(404,'File Not Found: %s' % self.path)
2092 2095
2093 except WebParameterError as e: 2096 except WebParameterError as e:
2094 self.send_error(404, 'Web parameter error: %s' % e.message) 2097 self.send_error(404, 'Web parameter error: %s' % e.message)
2095 2098
2096 2099
2097 HTML_REG_FORMAT = "<span class=\"register\"><b>%s</b>:&nbsp;%s</span>\n" 2100 HTML_REG_FORMAT = "<span class=\"register\"><b>%s</b>:&nbsp;%s</span><br/>\n"
2098 2101
2099 2102
2100 class InspectionWebFormatter(object): 2103 class InspectionWebFormatter(object):
2101 CONTEXT_FULL = 0 2104 CONTEXT_FULL = 0
2102 CONTEXT_SHORT = 1 2105 CONTEXT_SHORT = 1
2103 2106
2104 def __init__(self, switches, minidump_name, http_server): 2107 def __init__(self, switches, minidump_name, http_server):
2105 self.dumpfilename = os.path.split(minidump_name)[1] 2108 self.dumpfilename = os.path.split(minidump_name)[1]
2106 self.encfilename = urllib.urlencode({ 'dump' : self.dumpfilename }) 2109 self.encfilename = urllib.urlencode({ 'dump' : self.dumpfilename })
2107 self.reader = MinidumpReader(switches, minidump_name) 2110 self.reader = MinidumpReader(switches, minidump_name)
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2256 self.output_module_details(f, module) 2259 self.output_module_details(f, module)
2257 f.write("</div>") 2260 f.write("</div>")
2258 self.output_footer(f) 2261 self.output_footer(f)
2259 return 2262 return
2260 2263
2261 def output_context(self, f, details): 2264 def output_context(self, f, details):
2262 exception_thread = self.reader.thread_map[self.reader.exception.thread_id] 2265 exception_thread = self.reader.thread_map[self.reader.exception.thread_id]
2263 f.write("<h3>Exception context</h3>") 2266 f.write("<h3>Exception context</h3>")
2264 f.write('<div class="code">\n') 2267 f.write('<div class="code">\n')
2265 f.write("Thread id: %d" % exception_thread.id) 2268 f.write("Thread id: %d" % exception_thread.id)
2266 f.write("&nbsp;&nbsp; Exception code: %08X\n" % 2269 f.write("&nbsp;&nbsp; Exception code: %08X<br/>\n" %
2267 self.reader.exception.exception.code) 2270 self.reader.exception.exception.code)
2268 if details == InspectionWebFormatter.CONTEXT_FULL: 2271 if details == InspectionWebFormatter.CONTEXT_FULL:
2269 if self.reader.exception.exception.parameter_count > 0: 2272 if self.reader.exception.exception.parameter_count > 0:
2270 f.write("&nbsp;&nbsp; Exception parameters: \n") 2273 f.write("&nbsp;&nbsp; Exception parameters: \n")
2271 for i in xrange(0, self.reader.exception.exception.parameter_count): 2274 for i in xrange(0, self.reader.exception.exception.parameter_count):
2272 f.write("%08x" % self.reader.exception.exception.information[i]) 2275 f.write("%08x" % self.reader.exception.exception.information[i])
2273 f.write("<br><br>\n") 2276 f.write("<br><br>\n")
2274 2277
2275 for r in CONTEXT_FOR_ARCH[self.reader.arch]: 2278 for r in CONTEXT_FOR_ARCH[self.reader.arch]:
2276 f.write(HTML_REG_FORMAT % 2279 f.write(HTML_REG_FORMAT %
(...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after
3182 try: 3185 try:
3183 server = InspectionWebServer(PORT_NUMBER, options, args[0]) 3186 server = InspectionWebServer(PORT_NUMBER, options, args[0])
3184 print 'Started httpserver on port ' , PORT_NUMBER 3187 print 'Started httpserver on port ' , PORT_NUMBER
3185 webbrowser.open('http://localhost:%i/summary.html' % PORT_NUMBER) 3188 webbrowser.open('http://localhost:%i/summary.html' % PORT_NUMBER)
3186 server.serve_forever() 3189 server.serve_forever()
3187 except KeyboardInterrupt: 3190 except KeyboardInterrupt:
3188 print '^C received, shutting down the web server' 3191 print '^C received, shutting down the web server'
3189 server.socket.close() 3192 server.socket.close()
3190 else: 3193 else:
3191 AnalyzeMinidump(options, args[0]) 3194 AnalyzeMinidump(options, args[0])
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698