Index: docs/graphical_debugging_aid_chromium_views.md |
diff --git a/docs/graphical_debugging_aid_chromium_views.md b/docs/graphical_debugging_aid_chromium_views.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ba593722c94078ce9aa1dc526eb3c31a8976b35f |
--- /dev/null |
+++ b/docs/graphical_debugging_aid_chromium_views.md |
@@ -0,0 +1,51 @@ |
+# 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 |
+``` |