blob: 1bdd5264247ae3404ed31f596c1a8bab0613d1de [file] [log] [blame] [view]
andybons22afb312015-08-31 02:24:511# Graphical Debugging Aid for Chromium Views
andybons3322f762015-08-24 21:37:092
andybons22afb312015-08-31 02:24:513## Introduction
andybons3322f762015-08-24 21:37:094
andybons22afb312015-08-31 02:24:515A simple debugging tool exists to help visualize the views tree during
6debugging. It consists of 4 components:
andybons3322f762015-08-24 21:37:097
Scott Violet83d75362018-05-22 20:25:5281. The function `views::PrintViewGraph()` (in the file
9 `ui/views/debug_utils.h`),
andybons22afb312015-08-31 02:24:51101. a gdb script file `viewg.gdb` (see below),
111. the graphViz package (http://www.graphviz.org/ - downloadable for Linux,
12 Windows and Mac), and
131. an SVG viewer (_e.g._ Chrome).
14
15## Details
andybons3322f762015-08-24 21:37:0916
17To use the tool,
18
andybons22afb312015-08-31 02:24:51191. Make sure you have 'dot' installed (part of graphViz),
andybons22afb312015-08-31 02:24:51201. run gdb on your build and
211. `source viewg.gdb` (this can be done automatically in `.gdbinit`),
221. stop at any breakpoint inside class `View` (or any derived class), and
231. type `viewg` at the gdb prompt.
andybons3322f762015-08-24 21:37:0924
andybons22afb312015-08-31 02:24:5125This will cause the current view, and any descendants, to be described in a
26graph which is stored as `~/state.svg` (Windows users may need to modify the
27script slightly to run under CygWin). If `state.svg` is kept open in a browser
28window and refreshed each time `viewg` is run, then it provides a graphical
29representation of the state of the views hierarchy that is always up to date.
andybons3322f762015-08-24 21:37:0930
andybons22afb312015-08-31 02:24:5131It is easy to modify the gdb script to generate PDF in case viewing with evince
32(or other PDF viewer) is preferred.
andybons3322f762015-08-24 21:37:0933
andybons22afb312015-08-31 02:24:5134If you don't use gdb, you may be able to adapt the script to work with your
35favorite debugger. The gdb script invokes
andybons3322f762015-08-24 21:37:0936
Scott Violet83d75362018-05-22 20:25:5237 views::PrintViewGraph(this)
andybons22afb312015-08-31 02:24:5138
39on the current object, returning `std::string`, whose contents must then be
40saved to a file in order to be processed by dot.
41
42## viewg.gdb
andybons3322f762015-08-24 21:37:0943
44```
45define viewg
46 if $argc != 0
47 echo Usage: viewg
48 else
49 set pagination off
50 set print elements 0
51 set logging off
52 set logging file ~/state.dot
53 set logging overwrite on
54 set logging redirect on
55 set logging on
Scott Violet83d75362018-05-22 20:25:5256 printf "%s\n", view::PrintViewGraph(this).c_str()
andybons3322f762015-08-24 21:37:0957 set logging off
58 shell dot -Tsvg -o ~/state.svg ~/state.dot
59 set pagination on
60 end
61end
andybons22afb312015-08-31 02:24:5162```