| # Graphical Debugging Aid for Chromium Views |
| |
| ## Introduction |
| |
| A simple debugging tool exists to help visualize the views tree during |
| debugging. It consists of 4 components: |
| |
| 1. The function `View::PrintViewGraph()` (already in the file `view.cc` if |
| you've sync'd recently), |
| 1. a gdb script file `viewg.gdb` (see below), |
| 1. the graphViz package (http://www.graphviz.org/ - downloadable for Linux, |
| Windows and Mac), and |
| 1. an SVG viewer (_e.g._ Chrome). |
| |
| ## Details |
| |
| To use the tool, |
| |
| 1. Make sure you have 'dot' installed (part of graphViz), |
| 1. define `TOUCH_DEBUG` and compile chrome with Views enabled, |
| 1. run gdb on your build and |
| 1. `source viewg.gdb` (this can be done automatically in `.gdbinit`), |
| 1. stop at any breakpoint inside class `View` (or any derived class), and |
| 1. type `viewg` at the gdb prompt. |
| |
| 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. |
| |
| It is easy to modify the gdb script to generate PDF in case viewing with evince |
| (or other PDF viewer) is preferred. |
| |
| If you don't use gdb, you may be able to adapt the script to work with your |
| favorite debugger. The gdb script invokes |
| |
| this->PrintViewGraph(true) |
| |
| on the current object, returning `std::string`, whose contents must then be |
| saved to a file in order to be processed by dot. |
| |
| ## viewg.gdb |
| |
| ``` |
| define viewg |
| if $argc != 0 |
| echo Usage: viewg |
| else |
| set pagination off |
| set print elements 0 |
| set logging off |
| set logging file ~/state.dot |
| set logging overwrite on |
| set logging redirect on |
| set logging on |
| printf "%s\n", this->PrintViewGraph(true).c_str() |
| set logging off |
| shell dot -Tsvg -o ~/state.svg ~/state.dot |
| set pagination on |
| end |
| end |
| ``` |