| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright 2011 the V8 project authors. All rights reserved. | 3 # Copyright 2011 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 def ReadBytes(self, address, size): | 338 def ReadBytes(self, address, size): |
| 339 location = self.FindLocation(address) | 339 location = self.FindLocation(address) |
| 340 return self.minidump[location:location + size] | 340 return self.minidump[location:location + size] |
| 341 | 341 |
| 342 def FindLocation(self, address): | 342 def FindLocation(self, address): |
| 343 offset = 0 | 343 offset = 0 |
| 344 if self.memory_list64 is not None: | 344 if self.memory_list64 is not None: |
| 345 for r in self.memory_list64.ranges: | 345 for r in self.memory_list64.ranges: |
| 346 if r.start <= address < r.start + r.size: | 346 if r.start <= address < r.start + r.size: |
| 347 return self.memory_list64.base_rva + offset + address - r.start | 347 return self.memory_list64.base_rva + offset + address - r.start |
| 348 offset += r.size | 348 offset += r.size |
| 349 if self.memory_list is not None: | 349 if self.memory_list is not None: |
| 350 for r in self.memory_list.ranges: | 350 for r in self.memory_list.ranges: |
| 351 if r.start <= address < r.start + r.memory.data_size: | 351 if r.start <= address < r.start + r.memory.data_size: |
| 352 return r.memory.rva + address - r.start | 352 return r.memory.rva + address - r.start |
| 353 return None | 353 return None |
| 354 | 354 |
| 355 def GetDisasmLines(self, address, size): | 355 def GetDisasmLines(self, address, size): |
| 356 location = self.FindLocation(address) | 356 location = self.FindLocation(address) |
| 357 if location is None: return [] | 357 if location is None: return [] |
| 358 return disasm.GetDisasmLines(self.minidump_name, | 358 return disasm.GetDisasmLines(self.minidump_name, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 372 # #define DUMP_TYPE(T) printf("%d: \"%s\",\n", T, #T); | 372 # #define DUMP_TYPE(T) printf("%d: \"%s\",\n", T, #T); |
| 373 # struct P { | 373 # struct P { |
| 374 # P() { | 374 # P() { |
| 375 # printf("{\n"); | 375 # printf("{\n"); |
| 376 # INSTANCE_TYPE_LIST(DUMP_TYPE) | 376 # INSTANCE_TYPE_LIST(DUMP_TYPE) |
| 377 # printf("}\n"); | 377 # printf("}\n"); |
| 378 # } | 378 # } |
| 379 # }; | 379 # }; |
| 380 # static P p; | 380 # static P p; |
| 381 INSTANCE_TYPES = { | 381 INSTANCE_TYPES = { |
| 382 64: "SYMBOL_TYPE", | 382 64: "SYMBOL_TYPE", |
| 383 68: "ASCII_SYMBOL_TYPE", | 383 68: "ASCII_SYMBOL_TYPE", |
| 384 65: "CONS_SYMBOL_TYPE", | 384 65: "CONS_SYMBOL_TYPE", |
| 385 69: "CONS_ASCII_SYMBOL_TYPE", | 385 69: "CONS_ASCII_SYMBOL_TYPE", |
| 386 66: "EXTERNAL_SYMBOL_TYPE", | 386 66: "EXTERNAL_SYMBOL_TYPE", |
| 387 74: "EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE", | 387 74: "EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE", |
| 388 70: "EXTERNAL_ASCII_SYMBOL_TYPE", | 388 70: "EXTERNAL_ASCII_SYMBOL_TYPE", |
| 389 0: "STRING_TYPE", | 389 0: "STRING_TYPE", |
| 390 4: "ASCII_STRING_TYPE", | 390 4: "ASCII_STRING_TYPE", |
| 391 1: "CONS_STRING_TYPE", | 391 1: "CONS_STRING_TYPE", |
| 392 5: "CONS_ASCII_STRING_TYPE", | 392 5: "CONS_ASCII_STRING_TYPE", |
| 393 2: "EXTERNAL_STRING_TYPE", | 393 2: "EXTERNAL_STRING_TYPE", |
| 394 10: "EXTERNAL_STRING_WITH_ASCII_DATA_TYPE", | 394 10: "EXTERNAL_STRING_WITH_ASCII_DATA_TYPE", |
| 395 6: "EXTERNAL_ASCII_STRING_TYPE", | 395 6: "EXTERNAL_ASCII_STRING_TYPE", |
| 396 6: "PRIVATE_EXTERNAL_ASCII_STRING_TYPE", | 396 6: "PRIVATE_EXTERNAL_ASCII_STRING_TYPE", |
| 397 128: "MAP_TYPE", | 397 128: "MAP_TYPE", |
| 398 129: "CODE_TYPE", | 398 129: "CODE_TYPE", |
| 399 130: "ODDBALL_TYPE", | 399 130: "ODDBALL_TYPE", |
| 400 131: "JS_GLOBAL_PROPERTY_CELL_TYPE", | 400 131: "JS_GLOBAL_PROPERTY_CELL_TYPE", |
| 401 132: "HEAP_NUMBER_TYPE", | 401 132: "HEAP_NUMBER_TYPE", |
| 402 133: "FOREIGN_TYPE", | 402 133: "FOREIGN_TYPE", |
| 403 134: "BYTE_ARRAY_TYPE", | 403 134: "BYTE_ARRAY_TYPE", |
| 404 135: "EXTERNAL_BYTE_ARRAY_TYPE", | 404 135: "EXTERNAL_BYTE_ARRAY_TYPE", |
| 405 136: "EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE", | 405 136: "EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE", |
| 406 137: "EXTERNAL_SHORT_ARRAY_TYPE", | 406 137: "EXTERNAL_SHORT_ARRAY_TYPE", |
| 407 138: "EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE", | 407 138: "EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE", |
| 408 139: "EXTERNAL_INT_ARRAY_TYPE", | 408 139: "EXTERNAL_INT_ARRAY_TYPE", |
| 409 140: "EXTERNAL_UNSIGNED_INT_ARRAY_TYPE", | 409 140: "EXTERNAL_UNSIGNED_INT_ARRAY_TYPE", |
| 410 141: "EXTERNAL_FLOAT_ARRAY_TYPE", | 410 141: "EXTERNAL_FLOAT_ARRAY_TYPE", |
| 411 143: "EXTERNAL_PIXEL_ARRAY_TYPE", | 411 143: "EXTERNAL_PIXEL_ARRAY_TYPE", |
| 412 145: "FILLER_TYPE", | 412 145: "FILLER_TYPE", |
| 413 146: "ACCESSOR_INFO_TYPE", | 413 146: "ACCESSOR_INFO_TYPE", |
| 414 147: "ACCESS_CHECK_INFO_TYPE", | 414 147: "ACCESS_CHECK_INFO_TYPE", |
| 415 148: "INTERCEPTOR_INFO_TYPE", | 415 148: "INTERCEPTOR_INFO_TYPE", |
| 416 149: "CALL_HANDLER_INFO_TYPE", | 416 149: "CALL_HANDLER_INFO_TYPE", |
| 417 150: "FUNCTION_TEMPLATE_INFO_TYPE", | 417 150: "FUNCTION_TEMPLATE_INFO_TYPE", |
| 418 151: "OBJECT_TEMPLATE_INFO_TYPE", | 418 151: "OBJECT_TEMPLATE_INFO_TYPE", |
| 419 152: "SIGNATURE_INFO_TYPE", | 419 152: "SIGNATURE_INFO_TYPE", |
| 420 153: "TYPE_SWITCH_INFO_TYPE", | 420 153: "TYPE_SWITCH_INFO_TYPE", |
| 421 154: "SCRIPT_TYPE", | 421 154: "SCRIPT_TYPE", |
| 422 155: "CODE_CACHE_TYPE", | 422 155: "CODE_CACHE_TYPE", |
| 423 156: "POLYMORPHIC_CODE_CACHE_TYPE", | 423 156: "POLYMORPHIC_CODE_CACHE_TYPE", |
| 424 159: "FIXED_ARRAY_TYPE", | 424 159: "FIXED_ARRAY_TYPE", |
| 425 160: "SHARED_FUNCTION_INFO_TYPE", | 425 160: "SHARED_FUNCTION_INFO_TYPE", |
| 426 161: "JS_MESSAGE_OBJECT_TYPE", | 426 161: "JS_MESSAGE_OBJECT_TYPE", |
| 427 162: "JS_VALUE_TYPE", | 427 162: "JS_VALUE_TYPE", |
| 428 163: "JS_OBJECT_TYPE", | 428 163: "JS_OBJECT_TYPE", |
| 429 164: "JS_CONTEXT_EXTENSION_OBJECT_TYPE", | 429 164: "JS_CONTEXT_EXTENSION_OBJECT_TYPE", |
| 430 165: "JS_GLOBAL_OBJECT_TYPE", | 430 165: "JS_GLOBAL_OBJECT_TYPE", |
| 431 166: "JS_BUILTINS_OBJECT_TYPE", | 431 166: "JS_BUILTINS_OBJECT_TYPE", |
| 432 167: "JS_GLOBAL_PROXY_TYPE", | 432 167: "JS_GLOBAL_PROXY_TYPE", |
| 433 168: "JS_ARRAY_TYPE", | 433 168: "JS_ARRAY_TYPE", |
| 434 169: "JS_PROXY_TYPE", | 434 169: "JS_PROXY_TYPE", |
| 435 170: "JS_REGEXP_TYPE", | 435 170: "JS_WEAK_MAP_TYPE", |
| 436 171: "JS_FUNCTION_TYPE", | 436 171: "JS_REGEXP_TYPE", |
| 437 172: "JS_FUNCTION_PROXY_TYPE", | 437 172: "JS_FUNCTION_TYPE", |
| 438 157: "DEBUG_INFO_TYPE", | 438 173: "JS_FUNCTION_PROXY_TYPE", |
| 439 158: "BREAK_POINT_INFO_TYPE", | 439 157: "DEBUG_INFO_TYPE", |
| 440 158: "BREAK_POINT_INFO_TYPE", |
| 440 } | 441 } |
| 441 | 442 |
| 442 | 443 |
| 443 class Printer(object): | 444 class Printer(object): |
| 444 """Printer with indentation support.""" | 445 """Printer with indentation support.""" |
| 445 | 446 |
| 446 def __init__(self): | 447 def __init__(self): |
| 447 self.indent = 0 | 448 self.indent = 0 |
| 448 | 449 |
| 449 def Indent(self): | 450 def Indent(self): |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 reader.Dispose() | 841 reader.Dispose() |
| 841 | 842 |
| 842 | 843 |
| 843 if __name__ == "__main__": | 844 if __name__ == "__main__": |
| 844 parser = optparse.OptionParser(USAGE) | 845 parser = optparse.OptionParser(USAGE) |
| 845 options, args = parser.parse_args() | 846 options, args = parser.parse_args() |
| 846 if len(args) != 1: | 847 if len(args) != 1: |
| 847 parser.print_help() | 848 parser.print_help() |
| 848 sys.exit(1) | 849 sys.exit(1) |
| 849 AnalyzeMinidump(options, args[0]) | 850 AnalyzeMinidump(options, args[0]) |
| OLD | NEW |