Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: tools/gdb/gdb_chrome.py

Issue 2897573004: Add a GDB pretty printer for base::flat_map. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """GDB support for Chrome types. 5 """GDB support for Chrome types.
6 6
7 Add this to your gdb by amending your ~/.gdbinit as follows: 7 Add this to your gdb by amending your ~/.gdbinit as follows:
8 python 8 python
9 import sys 9 import sys
10 sys.path.insert(0, "/path/to/tools/gdb/") 10 sys.path.insert(0, "/path/to/tools/gdb/")
11 import gdb_chrome 11 import gdb_chrome
12 end 12 end
13 13
14 Use 14 Use
15 (gdb) p /r any_variable 15 (gdb) p /r any_variable
16 to print |any_variable| without using any printers. 16 to print |any_variable| without using any printers.
17
18 To interactively type Python for development of the printers:
19 (gdb) python foo = gdb.parse_and_eval('bar')
20 to put the C++ value 'bar' in the current scope into a Python variable 'foo'.
21 Then you can interact with that variable:
22 (gdb) python print foo['impl_']
17 """ 23 """
18 24
19 import datetime 25 import datetime
20 import gdb 26 import gdb
21 import gdb.printing 27 import gdb.printing
22 import os 28 import os
23 import sys 29 import sys
24 30
25 sys.path.insert(0, os.path.join( 31 sys.path.insert(0, os.path.join(
26 os.path.dirname(os.path.abspath(__file__)), 32 os.path.dirname(os.path.abspath(__file__)),
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 239
234 class ManualConstructorPrinter(object): 240 class ManualConstructorPrinter(object):
235 def __init__(self, val): 241 def __init__(self, val):
236 self.val = val 242 self.val = val
237 243
238 def to_string(self): 244 def to_string(self):
239 return self.val['space_'].cast(self.val.type.template_argument(0)) 245 return self.val['space_'].cast(self.val.type.template_argument(0))
240 pp_set.add_printer('base::ManualConstructor', '^base::ManualConstructor<.*>$', M anualConstructorPrinter) 246 pp_set.add_printer('base::ManualConstructor', '^base::ManualConstructor<.*>$', M anualConstructorPrinter)
241 247
242 248
249 class FlatMapPrinter(object):
250 def __init__(self, val):
251 self.val = val
252
253 def to_string(self):
254 # It would be nice to match the output of std::map which is a little
255 # nicer than printing the vector of pairs. But iterating over it in
256 # Python is much more complicated and this output is reasonable.
257 # (Without this printer, a flat_map will output 7 lines of internal
258 # template goop before the vector contents.)
259 return 'base::flat_map with ' + str(self.val['impl_']['body_'])
260 pp_set.add_printer('base::flat_map', '^base::flat_map<.*>$', FlatMapPrinter)
261
262
243 class ValuePrinter(object): 263 class ValuePrinter(object):
244 def __init__(self, val): 264 def __init__(self, val):
245 self.val = val 265 self.val = val
246 266
247 def get_type(self): 267 def get_type(self):
248 return self.val['type_'] 268 return self.val['type_']
249 269
250 def to_string(self): 270 def to_string(self):
251 typestr = str(self.get_type()) 271 typestr = str(self.get_type())
252 # Trim prefix to just get the emum short name. 272 # Trim prefix to just get the emum short name.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 yield ('sudden_termination_allowed_', 391 yield ('sudden_termination_allowed_',
372 self.val['sudden_termination_allowed_']) 392 self.val['sudden_termination_allowed_'])
373 yield ('ignore_input_events_', self.val['ignore_input_events_']) 393 yield ('ignore_input_events_', self.val['ignore_input_events_'])
374 yield ('is_guest_', self.val['is_guest_']) 394 yield ('is_guest_', self.val['is_guest_'])
375 pp_set.add_printer('content::RenderProcessHostImpl', 395 pp_set.add_printer('content::RenderProcessHostImpl',
376 '^content::RenderProcessHostImpl$', 396 '^content::RenderProcessHostImpl$',
377 RenderProcessHostImplPrinter) 397 RenderProcessHostImplPrinter)
378 398
379 399
380 gdb.printing.register_pretty_printer(gdb, pp_set, replace=_DEBUGGING) 400 gdb.printing.register_pretty_printer(gdb, pp_set, replace=_DEBUGGING)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698