[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 11:27:51 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 3ce91a567cf0bdf546658f65bf76e285ae1b98ce
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Jul 26 13:47:05 2010 +0000

    2010-07-26  Hayato Ito  <hayato at chromium.org>
    
            Reviewed by Shinichiro Hamaji.
    
            Add pretty printer of WTF::Vector for GDB 7.
    
            https://bugs.webkit.org/show_bug.cgi?id=40909
    
            * gdb/wtf.py: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64044 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index a7789e1..4d85069 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,13 @@
+2010-07-26  Hayato Ito  <hayato at chromium.org>
+
+        Reviewed by Shinichiro Hamaji.
+
+        Add pretty printer of WTF::Vector for GDB 7.
+
+        https://bugs.webkit.org/show_bug.cgi?id=40909
+
+        * gdb/wtf.py: Added.
+
 2010-07-26  Tor Arne Vestbø  <tor.arne.vestbo at nokia.com>
 
         Reviewed by Simon Hausmann.
diff --git a/WebKitTools/gdb/wtf.py b/WebKitTools/gdb/wtf.py
new file mode 100644
index 0000000..cf4b59b
--- /dev/null
+++ b/WebKitTools/gdb/wtf.py
@@ -0,0 +1,133 @@
+# Copyright (C) 2010, Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""GDB support for WebKit WTF types.
+
+Add this to your gdb by amending your ~/.gdbinit as follows:
+  python
+  import sys
+  sys.path.insert(0, "/path/to/tools/gdb/")
+  import wtf
+
+See http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html for GDB's
+Python API.
+"""
+
+import gdb
+import re
+
+
+class WTFVectorPrinter:
+    """Pretty Printer for a WTF::Vector.
+
+    The output of this pretty printer is similar to the output of std::vector's
+    pretty printer, which is bundled in gcc.
+
+    Example gdb session should look like:
+    (gdb) p v
+    $3 = WTF::Vector of length 7, capacity 16 = {7, 17, 27, 37, 47, 57, 67}
+    (gdb) set print elements 3
+    (gdb) p v
+    $6 = WTF::Vector of length 7, capacity 16 = {7, 17, 27...}
+    (gdb) set print array
+    (gdb) p v
+    $7 = WTF::Vector of length 7, capacity 16 = {
+      7,
+      17,
+      27
+      ...
+    }
+    (gdb) set print elements 200
+    (gdb) p v
+    $8 = WTF::Vector of length 7, capacity 16 = {
+      7,
+      17,
+      27,
+      37,
+      47,
+      57,
+      67
+    }
+    """
+
+    class Iterator:
+        def __init__(self, start, finish):
+            self.item = start
+            self.finish = finish
+            self.count = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self.item == self.finish:
+                raise StopIteration
+            count = self.count
+            self.count += 1
+            element = self.item.dereference()
+            self.item += 1
+            return ('[%d]' % count, element)
+
+    def __init__(self, val):
+        self.val = val
+
+    def children(self):
+        start = self.val['m_buffer']['m_buffer']
+        return self.Iterator(start, start + self.val['m_size'])
+
+    def to_string(self):
+        return ('%s of length %d, capacity %d'
+                % ('WTF::Vector', self.val['m_size'], self.val['m_buffer']['m_capacity']))
+
+    def display_hint(self):
+        return 'array'
+
+
+def lookup_function(val):
+    type = val.type
+    if type.code == gdb.TYPE_CODE_REF:
+        type = type.target()
+    type = type.unqualified().strip_typedefs()
+    typename = type.tag
+    if not typename:
+        return None
+    for function, pretty_printer in pretty_printers_dict.items():
+        if function.search(typename):
+            return pretty_printer(val)
+    return None
+
+
+def build_pretty_printers_dict():
+    pretty_printers_dict[re.compile('^WTF::Vector<.*>$')] = WTFVectorPrinter
+
+
+pretty_printers_dict = {}
+
+build_pretty_printers_dict()
+
+gdb.pretty_printers.append(lookup_function)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list