Roll src/third_party/skia a04c650:ac856c9
[chromium-blink-merge.git] / docs / graphical_debugging_aid_chromium_views.md
blobba593722c94078ce9aa1dc526eb3c31a8976b35f
1 # Introduction
3 A simple debugging tool exists to help visualize the views tree during debugging. It consists of 4 components:
5   1. The function `View::PrintViewGraph()` (already in the file **view.cc** if you've sync'd recently),
6   1. a gdb script file **viewg.gdb**  (see below),
7   1. the graphViz package (http://www.graphviz.org/ - downloadable for Linux, Windows and Mac), and
8   1. an SVG viewer (_e.g._ Chrome).
10 # Details
12 To use the tool,
14   1. Make sure you have 'dot' installed (part of graphViz),
15   1. define `TOUCH_DEBUG` and compile chrome with Views enabled,
16   1. run gdb on your build and
17   1. source **viewg.gdb** (this can be done automatically in **.gdbinit**),
18   1. stop at any breakpoint inside class `View` (or any derived class), and
19   1. type `viewg` at the gdb prompt.
21 This will cause the current view, and any descendants, to be described in a graph which is stored as **~/state.svg** (Windows users may need to modify the script slightly to run under CygWin). If **state.svg** is kept open in a browser window and refreshed each time `viewg` is run, then it provides a graphical representation of the state of the views hierarchy that is always up to date.
23 It is easy to modify the gdb script to generate PDF in case viewing with evince (or other PDF viewer) is preferred.
25 If you don't use gdb, you may be able to adapt the script to work with your favorite debugger. The gdb script invokes
26 ```
27   this->PrintViewGraph(true)
28 ```
29 on the current object, returning `std::string`, whose contents must then be saved to a file in order to be processed by dot.
31 # viewg.gdb
33 ```
34 define viewg
35   if $argc != 0
36     echo Usage: viewg
37   else
38     set pagination off
39     set print elements 0
40     set logging off
41     set logging file ~/state.dot
42     set logging overwrite on
43     set logging redirect on
44     set logging on
45     printf "%s\n", this->PrintViewGraph(true).c_str()
46     set logging off
47     shell dot -Tsvg -o ~/state.svg ~/state.dot
48     set pagination on
49   end
50 end
51 ```