diff options
author | jyasskin@chromium.org <jyasskin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 05:31:56 +0000 |
---|---|---|
committer | jyasskin@chromium.org <jyasskin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 05:31:56 +0000 |
commit | d3157a679a4b4d8e6d04de1872ba6a803d2994dc (patch) | |
tree | cb8f46f5992e4be6b2f3e91540e8c7a4fd858474 /tools/gdb | |
parent | 2bd262b6b647d15e63c63df7b2a90bb9cc7bfb31 (diff) | |
download | chromium_src-d3157a679a4b4d8e6d04de1872ba6a803d2994dc.zip chromium_src-d3157a679a4b4d8e6d04de1872ba6a803d2994dc.tar.gz chromium_src-d3157a679a4b4d8e6d04de1872ba6a803d2994dc.tar.bz2 |
Update printers for IPC::Message and RenderProcessHostImpl, and add one for PendingTask.
The PendingTask printer shows where the task was posted from in stack traces:
#15 0x00007ffff5cc7808 in base::MessageLoop::RunTask (this=0xdfdbbd37fe0, pending_task=
From OnStartWorkerStub()@../../content/browser/service_worker/embedded_worker_test_helper.cc:155 = {...}) at ../../base/message_loop/message_loop.cc:452
Outside of stack traces, it looks like:
$1 = From OnStartWorkerStub()@../../content/browser/service_worker/embedded_worker_test_helper.cc:155 = {
base::TrackingInfo = {
birth_tally = 0x0,
time_posted = 24 days, 1:56:07.286969,
delayed_run_time = 0:00:00
},
sequence_num = 3,
nestable = true
}
Review URL: https://codereview.chromium.org/236143004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264124 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/gdb')
-rw-r--r-- | tools/gdb/gdb_chrome.py | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/tools/gdb/gdb_chrome.py b/tools/gdb/gdb_chrome.py index 8c5405c..aa2e55a 100644 --- a/tools/gdb/gdb_chrome.py +++ b/tools/gdb/gdb_chrome.py @@ -45,6 +45,25 @@ def typed_ptr(ptr): return '((%s)%s)' % (ptr.dynamic_type, ptr) +def yield_fields(val): + """Use this in a printer's children() method to print an object's fields. + + e.g. + def children(): + for result in yield_fields(self.val): + yield result + """ + try: + fields = val.type.target().fields() + except: + fields = val.type.fields() + for field in fields: + if field.is_base_class: + yield (field.name, val.cast(gdb.lookup_type(field.name))) + else: + yield (field.name, val[field.name]) + + class Printer(object): def __init__(self, val): self.val = val @@ -141,6 +160,18 @@ pp_set.add_printer('tracked_objects::Location', '^tracked_objects::Location$', LocationPrinter) +class PendingTaskPrinter(Printer): + def to_string(self): + return 'From %s' % (self.val['posted_from'],) + + def children(self): + for result in yield_fields(self.val): + if result[0] not in ('task', 'posted_from'): + yield result +pp_set.add_printer('base::PendingTask', '^base::PendingTask$', + PendingTaskPrinter) + + class LockPrinter(Printer): def to_string(self): try: @@ -201,8 +232,7 @@ class IpcMessagePrinter(Printer): def children(self): yield ('header_', self.header().dereference()) - yield ('capacity_', self.val['capacity_']) - yield ('variable_buffer_offset_', self.val['variable_buffer_offset_']) + yield ('capacity_after_header_', self.val['capacity_after_header_']) for field in self.val.type.fields(): if field.is_base_class: continue @@ -275,8 +305,9 @@ class RenderProcessHostImplPrinter(object): def children(self): yield ('id_', self.val['id_']) - yield ('render_widget_hosts_', - self.val['render_widget_hosts_']['data_']) + yield ('listeners_', + self.val['listeners_']['data_']) + yield ('worker_ref_count_', self.val['worker_ref_count_']) yield ('fast_shutdown_started_', self.val['fast_shutdown_started_']) yield ('deleting_soon_', self.val['deleting_soon_']) yield ('pending_views_', self.val['pending_views_']) |