| 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 2789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2800 if code < 128: | 2800 if code < 128: |
| 2801 string += chr(code) | 2801 string += chr(code) |
| 2802 else: | 2802 else: |
| 2803 break | 2803 break |
| 2804 address += 1 | 2804 address += 1 |
| 2805 if string == "": | 2805 if string == "": |
| 2806 print "Not an ASCII string at %s" % self.reader.FormatIntPtr(address) | 2806 print "Not an ASCII string at %s" % self.reader.FormatIntPtr(address) |
| 2807 else: | 2807 else: |
| 2808 print "%s\n" % string | 2808 print "%s\n" % string |
| 2809 | 2809 |
| 2810 def do_dd(self, address): | 2810 def do_dd(self, args): |
| 2811 """ | 2811 """ |
| 2812 Interpret memory at the given address (if available) as a sequence | 2812 Interpret memory in the given region [address, address + num * word_size) |
| 2813 of words. Automatic alignment is not performed. | 2813 (if available) as a sequence of words. Automatic alignment is not performed
. |
| 2814 If the num is not specified, a default value of 16 words is used. |
| 2815 Synopsis: dd 0x<address> 0x<num> |
| 2814 """ | 2816 """ |
| 2815 start = int(address, 16) | 2817 args = args.split(' ') |
| 2818 start = int(args[0], 16) |
| 2819 num = int(args[1], 16) if len(args) > 1 else 0x10 |
| 2816 if (start & self.heap.ObjectAlignmentMask()) != 0: | 2820 if (start & self.heap.ObjectAlignmentMask()) != 0: |
| 2817 print "Warning: Dumping un-aligned memory, is this what you had in mind?" | 2821 print "Warning: Dumping un-aligned memory, is this what you had in mind?" |
| 2818 for slot in xrange(start, | 2822 for slot in xrange(start, |
| 2819 start + self.reader.PointerSize() * 10, | 2823 start + self.reader.PointerSize() * num, |
| 2820 self.reader.PointerSize()): | 2824 self.reader.PointerSize()): |
| 2821 if not self.reader.IsValidAddress(slot): | 2825 if not self.reader.IsValidAddress(slot): |
| 2822 print "Address is not contained within the minidump!" | 2826 print "Address is not contained within the minidump!" |
| 2823 return | 2827 return |
| 2824 maybe_address = self.reader.ReadUIntPtr(slot) | 2828 maybe_address = self.reader.ReadUIntPtr(slot) |
| 2825 heap_object = self.padawan.SenseObject(maybe_address) | 2829 heap_object = self.padawan.SenseObject(maybe_address) |
| 2826 print "%s: %s %s" % (self.reader.FormatIntPtr(slot), | 2830 print "%s: %s %s" % (self.reader.FormatIntPtr(slot), |
| 2827 self.reader.FormatIntPtr(maybe_address), | 2831 self.reader.FormatIntPtr(maybe_address), |
| 2828 heap_object or '') | 2832 heap_object or '') |
| 2829 | 2833 |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3150 try: | 3154 try: |
| 3151 server = InspectionWebServer(PORT_NUMBER, options, args[0]) | 3155 server = InspectionWebServer(PORT_NUMBER, options, args[0]) |
| 3152 print 'Started httpserver on port ' , PORT_NUMBER | 3156 print 'Started httpserver on port ' , PORT_NUMBER |
| 3153 webbrowser.open('http://localhost:%i/summary.html' % PORT_NUMBER) | 3157 webbrowser.open('http://localhost:%i/summary.html' % PORT_NUMBER) |
| 3154 server.serve_forever() | 3158 server.serve_forever() |
| 3155 except KeyboardInterrupt: | 3159 except KeyboardInterrupt: |
| 3156 print '^C received, shutting down the web server' | 3160 print '^C received, shutting down the web server' |
| 3157 server.socket.close() | 3161 server.socket.close() |
| 3158 else: | 3162 else: |
| 3159 AnalyzeMinidump(options, args[0]) | 3163 AnalyzeMinidump(options, args[0]) |
| OLD | NEW |