From: Carl Sorensen Date: Sat, 20 Feb 2010 15:43:23 +0000 (-0700) Subject: Doc:CG: Add information on graphviz X-Git-Tag: release/2.13.14-1~52 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b94ca33fe0e4431cb88dbd163775b19102ba9d18;p=lilypond.git Doc:CG: Add information on graphviz --- diff --git a/Documentation/contributor/programming-work.itexi b/Documentation/contributor/programming-work.itexi index ace1646b1b..797b31b572 100644 --- a/Documentation/contributor/programming-work.itexi +++ b/Documentation/contributor/programming-work.itexi @@ -9,6 +9,7 @@ * Finding functions:: * Code style:: * Debugging LilyPond:: +* Tracing object relationships:: * Adding or modifying features:: * Iterator tutorial:: * Engraver tutorial:: @@ -945,6 +946,95 @@ output to show when the procedure is called and when it exits. @code{set-trace-subtree!} traces every step the Scheme evaluator performs in evaluating the procedure. +@node Tracing object relationships +@section Tracing object relationships + +Understanding the LilyPond source often boils down to figuring out what +is happening to the Grobs. Where (and why) are they being created, +modified and destroyed? Tracing Lily through a debugger in order to +identify these relationships can be time-consuming and tedious. + +In order to simplify this process, a facility has been added to +display the grobs that are created and the properties that are set +and modified. Although it can be complex to get set up, once set up +it easily provides detailed information about the life of grobs +in the form of a network graph. + +Each of the steps necessary to use the graphviz utility +is described below. + +@enumerate + +@item Installing graphviz + +In order to create the graph of the object relationships, it is +first necessary to install Graphviz. graphviz is available for a +number of different platforms: + +@example +@uref{http://www.graphviz.org/Download..php} +@end example + +@item Modifying config.make + +In order for the Graphviz tool to work, config.make must be modified. +It is probably a good idea to first save a copy of config.make under +a different name. Then, edit config.make by removing every occurence +of @code{-DNDEBUG}. + +@item Rebuilding LilyPond + +The executable code of LilyPond must be rebuilt from scratch: + +@example +make -C lily clean && make -C lily +@end example + +@item Create a graphviz-compatible .ly file + +In order to use the graphviz utility, the .ly file must include +@file{ly/graphviz-init.ly}, and should then specify the +grobs and symbols that should be tracked. An example of this +is found in @file{input/regression/graphviz.ly}. + +@item Run lilypond with output sent to a log file + +The Graphviz data is sent to stderr by lilypond, so it is +necessary to redirect stderr to a logfile: + +@example +lilypond graphviz.ly 2> graphviz.log +@end example + +@item Edit the logfile + +The logfile has standard lilypond output, as well as the Graphviz +output data. Delete everything from the beginning of the file +up to but not including the first occurence of @code{digraph}. + +@item Process the logfile with @code{dot} + +The directed graph is created from the log file with the program +@code{dot}: + +@example +dot -Tpdf graphviz.log > graphviz.pdf +@end example + +@end enumerate + +The pdf file can then be viewed with any pdf viewer. + +When compiled without @code{-DNDEBUG}, lilypond may run slower +than normal. The original configuration can be restored by either +renaming the saved copy of @code{config.make} or rerunning +@code{configure}. Then rebuild lilypond with + +@example +make -C lily clean && make -C lily +@end example + + @node Adding or modifying features @section Adding or modifying features