FreeVR Debug levels — FreeVR's numeric values for configuring how much debugging info to output
The amount of debugging information that a running FreeVR virtual reality application outputs can be controlled by the configuration file in conjunction with a pair of environment variables. Most of the debugging output is geared toward debugging FreeVR itself, but there are settings to help debug VR configuration settings, and some for application debugging.
Debug Values
Specific operations are coded with particular debugging values which allows the user or developer to focus in on particular issues they may be experiencing, or want to keep watch for. Internally, these are numeric values that in-code are mapped to #define'd macro values. For convenience in the configuration file, these values are also mapped to built-in "variables" (in fact constants) and can be expressed as such to avoid having to learn all the numbers. Unfortunately, when using the environment variables, the actual numeric values must be used, so those values are included as well in the table below.Here is the list of debugging "topics", the built-in variables and the preset values:
Debug built-in num. Parameter variable value output nothing debug:none 0 Always output debug:always 1 Almost always output debug:aalways 2 Absolutely always debug:all 23 Commonly output debug:common 40 Default outout debug:default 50 Seldom output debug:seldom 100 Rarely output debug:rare 200 Almost never output debug:almostnever 1000 Configuration error debug:configerror 3 Configuration warning debug:configwarn 10 Process spawning/forking error debug:spawn 20 Performer information debug:performer 60 Performer detail debug:performerdetail 560 GLX information debug:glx 60 Config variable information debug:variable 65 Config parsing information debug:parse 70 Config parsing detail debug:parsedetail 190 Self-control information debug:selfcontrol 105 Library execution trace debug:trace 125 Magellan input information debug:mag 150 Shmem input information debug:shmem 151 Static input information debug:static 652 X11-windows input information debug:xwin 153 Pinchglove input information debug:pinchg 154 Ascension Flock of Birds input info debug:ascfob 155 Polhemus Fastrak input information debug:fastrk 156 Shared memory output information debug:shmemd 157 Vrui DeviceDaemon output info debug:vruidd 158 VRPN input information debug:vrpn 159 General input processes info debug:input 180 Configuration information debug:config 185 Callback handling information debug:callback 195 Callback handling details debug:callbackdetail 695 Barrier handling information debug:barrier 196 Serial communications information debug:serial 250 Math processing information debug:math 260 Object database search information debug:objsearch 270 Memory usage tracking debug:trackmem 296 Semaphore lock tracking debug:tracklocks 297
Tiered debugging output
FreeVR has a two-tiered capability for controlling how much and what output will be provided when running a FreeVR application. Each of these tiers can be independently set at any of several levels within the FreeVR configuration — such as at the process level, the system level, or globally.
- • Tier 1 — Output all information at or below a particular level
- The more general way to control debug and messaging output is by setting an overall "debug level". The value at which this parameter is set will allow all message levels at or below that value to be output. For example if the debug level is set to 40 (common), then any debug output for always, aalways, configerror, configwarn, spawn, and common will be output because each of these has a numeric value less than or equal to the numeric value of common.
In the configuration file, this is set as the DebugLevel parameter.
- • Tier 2 — Output information at exactly a particular level
- The overall goal for debugging output is to limit it to see values that will help highlight issues that need to be addressed (or to show that the system is operating normally). At times, of course, one may want to focus on a particular aspect of the running system to debug a specific aspect. In these cases, it is counter productive to set the level for something like debug:vruidd and have all the additional debugging information for all the other inputs and also the graphics rendering systems giving details of their operation that are not important to the task at hand.
To solve this, there is a mechanism to print one additional debug value on top of the less-than-or-equal-to values. In the configuration file, this is referred to as the DebugThisToo parameter.
- Thus, when the system decides whether to output a particular debugging related message, it checks both whether the value is less-than-or-equal-to the value of DebugLevel or is exactly equal to the value of DebugThisToo.
Specifying values in the configuration
As mentioned, there are three configuration object types that can have the debug output values set, and they are, in order of precedence (where being lower in the list overrides those that come before):
- Global configuration settings
set DebugLevel = $debug:common; set DebugThisToo = $debug:parsedetail;- System object settings
system $system += { DebugLevel = $debug:seldom; }- Process object settings
process "joydev-input" += { DebugThisToo = $debug:joydev; } process "default-telnet" += { DebugThisToo = $debug:parse; }- Environment variable settings
The following section describes the two environment variables that are used to set the debug output parameters run in a given terminal shell.
When a FreeVR application is executed, there are two environment variables in particular that affect the debugging information output:
- FREEVR_DEBUGLEVEL_NO
- Set level of debugging output that a FreeVR application will generate. Setting this value happens last, and thus none of the other means of reading configuration commands will override this setting — hence the NO (No Override) tag.
- FREEVR_DEBUGEXACT_NO
- Set an extra, exact level of debugging output that a FreeVR application will additionally generate, in addition to all messages at or below the general debug-level. Setting this value happens last, and thus none of the other means of reading configuration commands will override this setting — hence the NO (No Override) tag.
The FreeVR web site:
- http://www.freevr.org
The debug values are set in the source code "vr_debug.h" file, and the mapping of those values to built-in "variables" is in the "vr_debug.c" source file.
Copyright 2022, Bill Sherman, All rights reserved.