OLD | NEW |
---|---|
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 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1042 String.__init__(self, heap, map, address) | 1042 String.__init__(self, heap, map, address) |
1043 self.left = self.ObjectField(self.LeftOffset()) | 1043 self.left = self.ObjectField(self.LeftOffset()) |
1044 self.right = self.ObjectField(self.RightOffset()) | 1044 self.right = self.ObjectField(self.RightOffset()) |
1045 | 1045 |
1046 def GetChars(self): | 1046 def GetChars(self): |
1047 try: | 1047 try: |
1048 return self.left.GetChars() + self.right.GetChars() | 1048 return self.left.GetChars() + self.right.GetChars() |
1049 except: | 1049 except: |
1050 return "***CAUGHT EXCEPTION IN GROKDUMP***" | 1050 return "***CAUGHT EXCEPTION IN GROKDUMP***" |
1051 | 1051 |
1052 # Should match declarations in objects.h | |
1053 ODDBALL_KINDS = [ | |
Michael Starzinger
2012/06/19 11:38:35
Can we move that into the "Oddball" class?
| |
1054 "False", | |
1055 "True", | |
1056 "TheHole", | |
1057 "Null", | |
1058 "ArgumentMarker", | |
1059 "Undefined", | |
1060 "Other" | |
1061 ] | |
1052 | 1062 |
1053 class Oddball(HeapObject): | 1063 class Oddball(HeapObject): |
1054 def ToStringOffset(self): | 1064 def ToStringOffset(self): |
1055 return self.heap.PointerSize() | 1065 return self.heap.PointerSize() |
1056 | 1066 |
1067 def ToNumberOffset(self): | |
1068 return self.ToStringOffset() + self.heap.PointerSize() | |
1069 | |
1070 def KindOffset(self): | |
1071 return self.ToNumberOffset() + self.heap.PointerSize() | |
1072 | |
1057 def __init__(self, heap, map, address): | 1073 def __init__(self, heap, map, address): |
1058 HeapObject.__init__(self, heap, map, address) | 1074 HeapObject.__init__(self, heap, map, address) |
1059 self.to_string = self.ObjectField(self.ToStringOffset()) | 1075 self.to_string = self.ObjectField(self.ToStringOffset()) |
1076 self.kind = self.SmiField(self.KindOffset()) | |
1060 | 1077 |
1061 def Print(self, p): | 1078 def Print(self, p): |
1062 p.Print(str(self)) | 1079 p.Print(str(self)) |
1063 | 1080 |
1064 def __str__(self): | 1081 def __str__(self): |
1065 if self.to_string: | 1082 if self.to_string: |
1066 return "Oddball(%08x, <%s>)" % (self.address, self.to_string.GetChars()) | 1083 return "Oddball(%08x, <%s>)" % (self.address, self.to_string.GetChars()) |
1067 else: | 1084 else: |
1068 return "Oddball(%08x, kind=%s)" % (self.address, "???") | 1085 kind = "???" |
1086 if 0 <= self.kind < len(ODDBALL_KINDS): | |
1087 kind = ODDBALL_KINDS[self.kind] | |
1088 return "Oddball(%08x, kind=%s)" % (self.address, kind) | |
1069 | 1089 |
1070 | 1090 |
1071 class FixedArray(HeapObject): | 1091 class FixedArray(HeapObject): |
1072 def LengthOffset(self): | 1092 def LengthOffset(self): |
1073 return self.heap.PointerSize() | 1093 return self.heap.PointerSize() |
1074 | 1094 |
1075 def ElementsOffset(self): | 1095 def ElementsOffset(self): |
1076 return self.heap.PointerSize() * 2 | 1096 return self.heap.PointerSize() * 2 |
1077 | 1097 |
1078 def __init__(self, heap, map, address): | 1098 def __init__(self, heap, map, address): |
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1652 parser = optparse.OptionParser(USAGE) | 1672 parser = optparse.OptionParser(USAGE) |
1653 parser.add_option("-s", "--shell", dest="shell", action="store_true", | 1673 parser.add_option("-s", "--shell", dest="shell", action="store_true", |
1654 help="start an interactive inspector shell") | 1674 help="start an interactive inspector shell") |
1655 parser.add_option("-f", "--full", dest="full", action="store_true", | 1675 parser.add_option("-f", "--full", dest="full", action="store_true", |
1656 help="dump all information contained in the minidump") | 1676 help="dump all information contained in the minidump") |
1657 options, args = parser.parse_args() | 1677 options, args = parser.parse_args() |
1658 if len(args) != 1: | 1678 if len(args) != 1: |
1659 parser.print_help() | 1679 parser.print_help() |
1660 sys.exit(1) | 1680 sys.exit(1) |
1661 AnalyzeMinidump(options, args[0]) | 1681 AnalyzeMinidump(options, args[0]) |
OLD | NEW |