Xconq is both complicated and evolving. Therefore, it includes a
debugging infrastructure. The code is ifdef'ed with the flag
DEBUGGING so as to allow removal for "production" versions,
although in practice the size reduction seems minor.
There are several builtin flags available for dynamic control of debugging output, and printf macros to go with them.
Debugis for generic debug output, primarily kernel-oriented. The macro
Dprintftests it before printing, the command line flag
-Dsets it, and the command
DDtoggles it during the game.
DMprintfis the printing macro,
-DMsets from the command line, and the command
DGprintfis the printing macros,
-DGsets from the command line, and
DGis the toggling command.
It may also be useful to change interface behavior when debugging is enabled. For instance, you can display internal unit id in closeups, toplines, etc, in addition to the usual unit info (which may not identify a unit uniquely). Or you can make the interface display additional guides or bounding boxes to show where drawing is happening or not happening.
Although Xconq has been liberally sprinkled with debugging output, in this modern age of computing, powerful source-level debuggers are widely available, and there is no good reason to add debugging code to do a job that could be done by the debugger. Xconq debugging output is mainly designed to be useful for understanding average behavior, changes over time, and "high-level transients" such as thrashing in plan or task execution; information that is difficult to collect using only a debugger. When adding new debug output, you should keep this principle in mind. Also, be aware that some of the automated testing scripts enable debug output, so if you add something that is uselessly voluminous, testing output may fill your disk prematurely!
Another principle to use in designing debug output is to try to make
each line self-contained. The output may run to thousands of lines, and
tools like grep can be very useful filters, if the output is correctly
formatted. For instance, the function
unit_desig will produce a
string that includes a unit's side, type, id, and position in a fixed
format, which makes it easy to find the unit in debug output and then
track its activities.