10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?> 20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 30f8248bfSmrg "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> 4eb411b4bSmrg<chapter id='Debugging_Aids'> 5e9fcaa8aSmrg<title>Debugging Aids</title> 6e9fcaa8aSmrg 7e9fcaa8aSmrg<para> 8e9fcaa8aSmrgThe debugging aids are intended for use primarily by Xkb implementors and are 9e9fcaa8aSmrgoptional in any implementation. 10e9fcaa8aSmrg</para> 11e9fcaa8aSmrg 12e9fcaa8aSmrg 13e9fcaa8aSmrg<para> 14e9fcaa8aSmrgThere are two bitmasks that may be used to control debugging. One bitmask 15e9fcaa8aSmrgcontrols the output of debugging information, and the other controls behavior. 16e9fcaa8aSmrgBoth bitmasks are initially all zeros. 17e9fcaa8aSmrg</para> 18e9fcaa8aSmrg 19e9fcaa8aSmrg 20e9fcaa8aSmrg<para> 210f8248bfSmrgTo change the values of any of the debug controls, use 220f8248bfSmrg<function>XkbSetDebuggingFlags</function>. 23e9fcaa8aSmrg</para> 24e9fcaa8aSmrg 250f8248bfSmrg<indexterm significance="preferred" zone="XkbSetDebuggingFlags"><primary><function>XkbSetDebuggingFlags</function></primary></indexterm> 260f8248bfSmrg<funcsynopsis id="XkbSetDebuggingFlags"> 270f8248bfSmrg <funcprototype> 280f8248bfSmrg <funcdef>Bool <function>XkbSetDebuggingFlags</function></funcdef> 290f8248bfSmrg<!-- ( 300f8248bfSmrg<parameter>display, mask, flags, msg, ctrls_mask, ctrls, ret_flags, ret_ctrls</parameter> 310f8248bfSmrg) --> 320f8248bfSmrg 330f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 340f8248bfSmrg <paramdef>unsigned int <parameter>mask</parameter></paramdef> 350f8248bfSmrg <paramdef>unsigned int <parameter>flags</parameter></paramdef> 360f8248bfSmrg <paramdef>char *<parameter>msg</parameter></paramdef> 370f8248bfSmrg <paramdef>unsigned int <parameter>ctrls_mask</parameter></paramdef> 380f8248bfSmrg <paramdef>unsigned int <parameter>ctrls</parameter></paramdef> 390f8248bfSmrg <paramdef>unsigned int *<parameter>ret_flags</parameter></paramdef> 400f8248bfSmrg <paramdef>unsigned int *<parameter>ret_ctrls</parameter></paramdef> 410f8248bfSmrg </funcprototype> 420f8248bfSmrg</funcsynopsis> 430f8248bfSmrg<variablelist> 440f8248bfSmrg <varlistentry> 450f8248bfSmrg <term> 460f8248bfSmrg <parameter>display</parameter> 470f8248bfSmrg </term> 480f8248bfSmrg <listitem> 490f8248bfSmrg <para> 500f8248bfSmrg connection to X server 510f8248bfSmrg </para> 520f8248bfSmrg </listitem> 530f8248bfSmrg </varlistentry> 540f8248bfSmrg <varlistentry> 550f8248bfSmrg <term> 560f8248bfSmrg <parameter>mask</parameter> 570f8248bfSmrg </term> 580f8248bfSmrg <listitem> 590f8248bfSmrg <para> 600f8248bfSmrg mask selecting debug output flags to change 610f8248bfSmrg </para> 620f8248bfSmrg </listitem> 630f8248bfSmrg </varlistentry> 640f8248bfSmrg <varlistentry> 650f8248bfSmrg <term> 660f8248bfSmrg <parameter>flags</parameter> 670f8248bfSmrg </term> 680f8248bfSmrg <listitem> 690f8248bfSmrg <para> 700f8248bfSmrg values for debug output flags selected by <parameter>mask</parameter> 710f8248bfSmrg </para> 720f8248bfSmrg </listitem> 730f8248bfSmrg </varlistentry> 740f8248bfSmrg <varlistentry> 750f8248bfSmrg <term> 760f8248bfSmrg <parameter>msg</parameter> 770f8248bfSmrg </term> 780f8248bfSmrg <listitem> 790f8248bfSmrg <para> 800f8248bfSmrg message to print right now 810f8248bfSmrg </para> 820f8248bfSmrg </listitem> 830f8248bfSmrg </varlistentry> 840f8248bfSmrg <varlistentry> 850f8248bfSmrg <term> 860f8248bfSmrg <parameter>ctrls_mask</parameter> 870f8248bfSmrg </term> 880f8248bfSmrg <listitem> 890f8248bfSmrg <para> 900f8248bfSmrg mask selecting debug controls to change 910f8248bfSmrg </para> 920f8248bfSmrg </listitem> 930f8248bfSmrg </varlistentry> 940f8248bfSmrg <varlistentry> 950f8248bfSmrg <term> 960f8248bfSmrg <parameter>ctrls</parameter> 970f8248bfSmrg </term> 980f8248bfSmrg <listitem> 990f8248bfSmrg <para> 1000f8248bfSmrg values for debug controls selected by <parameter>ctrls_mask</parameter> 1010f8248bfSmrg </para> 1020f8248bfSmrg </listitem> 1030f8248bfSmrg </varlistentry> 1040f8248bfSmrg <varlistentry> 1050f8248bfSmrg <term> 1060f8248bfSmrg <parameter>ret_flags</parameter> 1070f8248bfSmrg </term> 1080f8248bfSmrg <listitem> 1090f8248bfSmrg <para> 1100f8248bfSmrg resulting state of all debug output flags 1110f8248bfSmrg </para> 1120f8248bfSmrg </listitem> 1130f8248bfSmrg </varlistentry> 1140f8248bfSmrg <varlistentry> 1150f8248bfSmrg <term> 1160f8248bfSmrg <parameter>ret_ctrls</parameter> 1170f8248bfSmrg </term> 1180f8248bfSmrg <listitem> 1190f8248bfSmrg <para> 1200f8248bfSmrg resulting state of all debug controls 1210f8248bfSmrg </para> 1220f8248bfSmrg </listitem> 1230f8248bfSmrg </varlistentry> 1240f8248bfSmrg</variablelist> 125e9fcaa8aSmrg 126e9fcaa8aSmrg<para> 1270f8248bfSmrg<function>XkbSetDebuggingFlags</function> 1280f8248bfSmrgmodifies the debug output flags as specified by 1290f8248bfSmrg<parameter>mask</parameter> 1300f8248bfSmrgand 1310f8248bfSmrg<parameter>flags</parameter>, 1320f8248bfSmrgmodifies the debug controls flags as specified by 1330f8248bfSmrg<parameter>ctrls_mask</parameter> 1340f8248bfSmrgand 1350f8248bfSmrg<parameter>ctrls</parameter>, 1360f8248bfSmrgprints the message 1370f8248bfSmrg<parameter>msg</parameter>, 1380f8248bfSmrgand backfills 1390f8248bfSmrg<parameter>ret_flags</parameter> 1400f8248bfSmrgand 1410f8248bfSmrg<parameter>ret_ctrls</parameter> 1420f8248bfSmrgwith the resulting debug output and debug controls flags. 143e9fcaa8aSmrg</para> 144e9fcaa8aSmrg 145e9fcaa8aSmrg 146e9fcaa8aSmrg<para> 1470f8248bfSmrgWhen bits are set in the debug output masks, 1480f8248bfSmrg<parameter>mask</parameter> 1490f8248bfSmrgand 1500f8248bfSmrg<parameter>flags</parameter>, 1510f8248bfSmrgXkb prints debug information corresponding to each bit at appropriate points 152e9fcaa8aSmrgduring its processing. The device to which the output is written is 153e9fcaa8aSmrgimplementation-dependent, but is normally the same device to which X server 1540f8248bfSmrgerror messages are directed; thus the bits that can be set in 1550f8248bfSmrg<parameter>mask</parameter> 1560f8248bfSmrgand 1570f8248bfSmrg<parameter>flags</parameter> 1580f8248bfSmrgis implementation-specific. To turn on a debug output selection, set the bit 1590f8248bfSmrgfor the output in the 1600f8248bfSmrg<parameter>mask</parameter> 1610f8248bfSmrgparameter and set the corresponding bit in the 1620f8248bfSmrg<parameter>flags</parameter> 1630f8248bfSmrgparameter. To turn off event selection for an event, set the bit for the 1640f8248bfSmrgoutput in the 1650f8248bfSmrg<parameter>mask</parameter> 1660f8248bfSmrgparameter and do not set the corresponding bit in the 1670f8248bfSmrg<parameter>flags</parameter> 1680f8248bfSmrgparameter. 169e9fcaa8aSmrg</para> 170e9fcaa8aSmrg 171e9fcaa8aSmrg 172e9fcaa8aSmrg<para> 1730f8248bfSmrgWhen bits are set in the debug controls masks, 1740f8248bfSmrg<parameter>ctrls_mask</parameter> 1750f8248bfSmrgand 1760f8248bfSmrg<parameter>ctrls</parameter>, 1770f8248bfSmrgXkb modifies its behavior according to each controls bit. 1780f8248bfSmrg<parameter>ctrls_mask</parameter> 1790f8248bfSmrgand 1800f8248bfSmrg<parameter>ctrls</parameter> 1810f8248bfSmrgare related in the same way that 1820f8248bfSmrg<parameter>mask</parameter> 1830f8248bfSmrgand 1840f8248bfSmrg<parameter>flags</parameter> 1850f8248bfSmrgare. The valid controls bits are defined in 1860f8248bfSmrg<link linkend="table22.1">Table 22.1</link>. 187e9fcaa8aSmrg</para> 188e9fcaa8aSmrg 1890f8248bfSmrg<table id='table22.1' frame='topbot'> 190e9fcaa8aSmrg<title>Debug Control Masks</title> 191eb411b4bSmrg<?dbfo keep-together="always" ?> 192eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 193eb411b4bSmrg<colspec colname='c1' colwidth='1.5*'/> 194eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 195eb411b4bSmrg<colspec colname='c3' colwidth='2.0*'/> 196e9fcaa8aSmrg<thead> 197eb411b4bSmrg<row rowsep='1'> 198e9fcaa8aSmrg <entry>Debug Control Mask</entry> 199e9fcaa8aSmrg <entry>Value</entry> 200e9fcaa8aSmrg <entry>Meaning</entry> 201e9fcaa8aSmrg</row> 202e9fcaa8aSmrg</thead> 203e9fcaa8aSmrg<tbody> 204eb411b4bSmrg<row> 2050f8248bfSmrg <entry><symbol>XkbDF_DisableLocks</symbol></entry> 206e9fcaa8aSmrg <entry>(1 << 0)</entry> 207e9fcaa8aSmrg <entry>Disable actions that lock modifiers</entry> 208e9fcaa8aSmrg </row> 209e9fcaa8aSmrg</tbody> 210e9fcaa8aSmrg</tgroup> 211e9fcaa8aSmrg</table> 212e9fcaa8aSmrg 213e9fcaa8aSmrg<para> 2140f8248bfSmrg<function>XkbSetDebuggingFlags</function> 2150f8248bfSmrgreturns 2160f8248bfSmrg<symbol>True</symbol> 2170f8248bfSmrgif successful and 2180f8248bfSmrg<symbol>False</symbol> 2190f8248bfSmrgotherwise. The only protocol error it may generate is 2200f8248bfSmrg<errorname>BadAlloc</errorname>, 2210f8248bfSmrgif for some reason it is unable to allocate storage. 222e9fcaa8aSmrg</para> 223e9fcaa8aSmrg 224e9fcaa8aSmrg 225e9fcaa8aSmrg<para> 2260f8248bfSmrg<function>XkbSetDebuggingFlags</function> 2270f8248bfSmrgis intended for developer use and may be disabled in production X servers. If 2280f8248bfSmrgit is disabled, 2290f8248bfSmrg<function>XkbSetDebuggingFlags</function> 2300f8248bfSmrghas no effect and does not generate any protocol errors. 231e9fcaa8aSmrg</para> 232e9fcaa8aSmrg 233e9fcaa8aSmrg 234e9fcaa8aSmrg<para> 2350f8248bfSmrgThe message in 2360f8248bfSmrg<parameter>msg</parameter> 2370f8248bfSmrgis written immediately. The device to which it is written is implementation 238e9fcaa8aSmrgdependent but is normally the same device where X server error messages are 239e9fcaa8aSmrgdirected. 240e9fcaa8aSmrg</para> 241e9fcaa8aSmrg</chapter> 242