Go to the first, previous, next, last section, table of contents.

Debugging

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.

Debug
The global flag Debug is for generic debug output, primarily kernel-oriented. The macro Dprintf tests it before printing, the command line flag -D sets it, and the command DD toggles it during the game.
DebugM
This flag controls the debugging output for AIs and planning. DMprintf is the printing macro, -DM sets from the command line, and the command DM toggles.
DebugG
This flag controls debugging output for interfaces. DGprintf is the printing macros, -DG sets from the command line, and DG is 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.


Go to the first, previous, next, last section, table of contents.