diff options
Diffstat (limited to 'chromium/third_party/WebKit/Tools/gdb/webkit.py')
-rw-r--r-- | chromium/third_party/WebKit/Tools/gdb/webkit.py | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/chromium/third_party/WebKit/Tools/gdb/webkit.py b/chromium/third_party/WebKit/Tools/gdb/webkit.py index 97c31036264..ef4680327d9 100644 --- a/chromium/third_party/WebKit/Tools/gdb/webkit.py +++ b/chromium/third_party/WebKit/Tools/gdb/webkit.py @@ -35,18 +35,19 @@ Add this to your gdb by amending your ~/.gdbinit as follows: import webkit """ +from __future__ import print_function + import gdb import re import struct - def guess_string_length(ptr): """Guess length of string pointed by ptr. Returns a tuple of (length, an error message). """ # Try to guess at the length. - for i in xrange(0, 2048): + for i in range(0, 2048): try: if int((ptr + i).dereference()) == 0: return i, '' @@ -66,7 +67,7 @@ def ustring_to_string(ptr, length=None): length, error_message = guess_string_length(ptr) else: length = int(length) - char_vals = [int((ptr + i).dereference()) for i in xrange(length)] + char_vals = [int((ptr + i).dereference()) for i in range(length)] string = struct.pack('H' * length, *char_vals).decode('utf-16', 'replace').encode('utf-8') return string + error_message @@ -81,7 +82,7 @@ def lstring_to_string(ptr, length=None): length, error_message = guess_string_length(ptr) else: length = int(length) - string = ''.join([chr((ptr + i).dereference()) for i in xrange(length)]) + string = ''.join([chr((ptr + i).dereference()) for i in range(length)]) return string + error_message @@ -118,7 +119,7 @@ class WTFCStringPrinter(StringPrinter): # The CString holds a buffer, which is a refptr to a WTF::CStringBuffer. data = self.val['m_buffer']['m_ptr']['m_data'].cast(gdb.lookup_type('char').pointer()) length = self.val['m_buffer']['m_ptr']['m_length'] - return ''.join([chr((data + i).dereference()) for i in xrange(length)]) + return ''.join([chr((data + i).dereference()) for i in range(length)]) class WTFStringImplPrinter(StringPrinter): @@ -176,6 +177,33 @@ class WebCoreKURLPrinter(StringPrinter): return WTFStringPrinter(self.val['m_string']).to_string() +class WebCoreLayoutUnitPrinter: + "Print a WebCore::LayoutUnit" + def __init__(self, val): + self.val = val + + def to_string(self): + return "%gpx" % (self.val['m_value'] / 64.0) + + +class WebCoreLayoutSizePrinter: + "Print a WebCore::LayoutSize" + def __init__(self, val): + self.val = val + + def to_string(self): + return 'LayoutSize(%s, %s)' % (WebCoreLayoutUnitPrinter(self.val['m_width']).to_string(), WebCoreLayoutUnitPrinter(self.val['m_height']).to_string()) + + +class WebCoreLayoutPointPrinter: + "Print a WebCore::LayoutPoint" + def __init__(self, val): + self.val = val + + def to_string(self): + return 'LayoutPoint(%s, %s)' % (WebCoreLayoutUnitPrinter(self.val['m_x']).to_string(), WebCoreLayoutUnitPrinter(self.val['m_y']).to_string()) + + class WebCoreQualifiedNamePrinter(StringPrinter): "Print a WebCore::QualifiedName" @@ -185,9 +213,9 @@ class WebCoreQualifiedNamePrinter(StringPrinter): self.length = 0 if self.val['m_impl']: self.prefix_printer = WTFStringPrinter( - self.val['m_impl']['m_prefix']['m_string']) + self.val['m_impl']['m_ptr']['m_prefix']['m_string']) self.local_name_printer = WTFStringPrinter( - self.val['m_impl']['m_localName']['m_string']) + self.val['m_impl']['m_ptr']['m_localName']['m_string']) self.prefix_length = self.prefix_printer.get_length() if self.prefix_length > 0: self.length = (self.prefix_length + 1 + @@ -282,6 +310,9 @@ def add_pretty_printers(): (re.compile("^WTF::String$"), WTFStringPrinter), (re.compile("^WTF::StringImpl$"), WTFStringImplPrinter), (re.compile("^WebCore::KURL$"), WebCoreKURLPrinter), + (re.compile("^WebCore::LayoutUnit$"), WebCoreLayoutUnitPrinter), + (re.compile("^WebCore::LayoutPoint$"), WebCoreLayoutPointPrinter), + (re.compile("^WebCore::LayoutSize$"), WebCoreLayoutSizePrinter), (re.compile("^WebCore::QualifiedName$"), WebCoreQualifiedNamePrinter), (re.compile("^JSC::Identifier$"), JSCIdentifierPrinter), (re.compile("^JSC::JSString$"), JSCJSStringPrinter), @@ -330,7 +361,7 @@ class PrintPathToRootCommand(gdb.Command): try: val = gdb.Frame.read_var(frame, arg) except: - print "No such variable, or invalid type" + print("No such variable, or invalid type") return target_type = str(val.type.target().strip_typedefs()) @@ -344,10 +375,10 @@ class PrintPathToRootCommand(gdb.Command): padding = '' while len(stack) > 0: pair = stack.pop() - print padding, pair[1], pair[0] + print(padding, pair[1], pair[0]) padding = padding + ' ' else: - print 'Sorry: I don\'t know how to deal with %s yet.' % target_type + print('Sorry: I don\'t know how to deal with %s yet.' % target_type) PrintPathToRootCommand() |