.TH GROFF_TRACE 7 "27 January 2021" "groff 1.22.4" .SH NAME groff_trace \- groff macro package trace.tmac . .\" groff_trace.7 .\" File position: /tmac/groff_trace.man . . .\" Save and disable compatibility mode (for, e.g., Solaris 10/11). .do nr groff_trace_C \n[.C] .cp 0 . . .\" ==================================================================== .\" Legal Terms .\" ==================================================================== .\" .\" Copyright (C) 2002-2018 Free Software Foundation, Inc. .\" .\" This file is part of groff, the GNU roff type-setting system. .\" .\" Permission is granted to copy, distribute and/or modify this .\" document under the terms of the GNU Free Documentation License, .\" Version 1.3 or any later version published by the Free Software .\" Foundation; with no Invariant Sections, with no Front-Cover Texts, .\" and with no Back-Cover Texts. .\" .\" A copy of the Free Documentation License is included as a file .\" called FDL in the main directory of the groff source package. .\" .\" A copy of the GNU Free Documentation License is also available in this .\" Debian package as /usr/share/doc/groff/copyright. . . .\" ==================================================================== .SH SYNOPSIS .\" ==================================================================== . .SY "groff \-m trace" .RI [ option \&.\|.\|.\&] .RI [ input-file \&.\|.\|.\&] .YS . . .\" ==================================================================== .SH DESCRIPTION .\" ==================================================================== . The .I trace macro package of .BR groff (1) can be a valuable tool for debugging documents written in the roff formatting language. . A call stack trace is protocolled on standard error, this is, a diagnostic message is emitted on entering and exiting of a macro call. . This greatly eases to track down an error in some macro. . . .P This tracing process is activated by specifying the groff or troff command-line option .BR \-m\ trace . . This works also with the .BR groffer (1) viewer program. . A finer control can be obtained by including the macro file within the document by the groff macro call .BR .mso\ trace.tmac . . Only macros that are defined after this line are traced. . . .P If the command-line option .B \-r\ trace-full=1 is given (or if this register is set in the document), number and string register assignments together with some other requests are traced also. . . .P If some other macro package should be traced as well it must be specified after .B \-m\ trace on the command line. . . .P The macro file .B trace.tmac is unusual because it does not contain any macros to be called by a user. . Instead, the existing macro definition and appending facilities are modified such that they display diagnostic messages. . . .\" ==================================================================== .SH EXAMPLES .\" ==================================================================== . In the following examples, a roff fragment is fed into groff via standard input. . As we are only interested in the diagnostic messages (standard error) on the terminal, the normal formatted output (standard output) is redirected to the nirvana device .IR /dev/null . . The resulting diagnostic messages are displayed directly below the corresponding example. . . .\" ==================================================================== .SS "Command line option" Example: . .RS .P .EX \fIsh#\fP echo \[aq]. > .de test_macro > .. > .test_macro > .test_macro some dummy arguments > \[aq] | groff \-m trace > /dev/null *** .de test_macro *** de trace enter: .test_macro *** trace exit: .test_macro *** de trace enter: .test_macro "some" "dummy" "arguments" *** trace exit: .test_macro "some" "dummy" "arguments" .EE .RE . .P The entry and the exit of each macro call is displayed on the terminal (standard output) \[em] together with the arguments (if any). . . .\" ==================================================================== .SS "Nested macro calls" Example: . .RS .P .EX \fIsh#\fP echo \[aq]. > .de child > .. > .de parent > .child > .. > .parent > \[aq] | groff \-m trace > /dev/null *** .de child *** .de parent *** de trace enter: .parent *** de trace enter: .child *** trace exit: .child *** trace exit: .parent .EE .RE . .P This shows that macro calls can be nested. . This powerful feature can help to tack down quite complex call stacks. . . .\" ==================================================================== .SS "Activating with .mso" Example: . .RS .P .EX \fIsh#\fP echo \[aq]. > .de before > .. > .mso trace.tmac > .de after > .. > .before > .after > .before > \[aq] | groff > /dev/null *** de trace enter: .after *** trace exit: .after .EE .RE . .P Here, the tracing is activated within the document, not by a command-line option. . As tracing was not active when macro .I before was defined, no call of this macro is protocolled; on the other hand, the macro .I after is fully protocolled. . . .\" ==================================================================== .SH PROBLEMS .\" ==================================================================== . Because .B trace.tmac wraps the .B .de request (and its cousins), macro arguments are expanded one level more. . This causes problems if an argument contains four backslashes or more to prevent too early expansion of the backslash. . For example, this macro call . .IP .EX \&.foo \e\e\e\en[bar] .EE . . .P normally passes \[oq]\e\en[bar]\[cq] to macro \[oq].foo\[cq], but with the redefined .B .de request it passes \[oq]\en[bar]\[cq] instead. . . .P The solution to this problem is to use groff's .B \eE escape which is an escape character not interpreted in copy mode, for example . .IP .EX \&.foo \eEn[bar] .EE . . .\" ==================================================================== .SH FILES .\" ==================================================================== . The .I trace macros are kept in the file .B trace.tmac located in the .IR "tmac directory" ; see .BR groff_tmac (5) for details. . . .\" ==================================================================== .SH ENVIRONMENT .\" ==================================================================== . .TP .I GROFF_TMAC_PATH A colon-separated list of additional tmac directories in which to search for macro files; see .BR groff_tmac (5) for details. . . .\" ==================================================================== .SH AUTHORS .\" ==================================================================== . The .I trace macro packages was written by James Clark. . This document was written by .MT groff\-bernd.warken\-72@\:web.de Bernd Warken .ME . . . .\" ==================================================================== .SH "SEE ALSO" .\" ==================================================================== . .IR "Groff: The GNU Implementation of troff" , by Trent A.\& Fisher and Werner Lemberg, is the primary .I groff manual. . You can browse it interactively with \[lq]info groff\[rq]. . . .TP .BR groff (1) An overview of the groff system. . .TP .BR troff (1) For details on option .BR \-m . . .TP .BR groffer (1) A viewer program for all kinds of roff documents. . .TP .BR groff_tmac (5) A general description of groff macro packages. . .TP .BR groff (7) A short reference for the groff formatting language. . .\" Restore compatibility mode (for, e.g., Solaris 10/11). .cp \n[groff_trace_C] . . .\" Local Variables: .\" mode: nroff .\" End: .\" vim: set filetype=groff: