BES - How to Debug the BES

From OPeNDAP Documentation
⧼opendap2-jumptonavigation⧽

Tricks

  • Set the beslistener to run in single, not multiprocess, mode. Do this in the bes.conf file (use the BES.ProcessManagerMethod parameter).
  • Build the bes using developer mode (so it won't need to be root, among other things). Do this with ./configure --enable-developer

Use the BESDEBUG Macro

Use the macro BESDEBUG defined in BESDebug.h.

Set the macro's 'context' as "bes" (nominally, or you can make up whatever you want) and then use the "cerr << "text: " << var << endl" style output except that you should leave off the initial "cerr <<" and start with the first argument of the stuff to be output - the marco will take care of getting the output sink and using the output operator.

Example:

#include <BESDebug.h>
...
BESDEBUG( "h4", "File Id:" << _file_id << endl);

Notes:

  1. You'll need to include the BES_DAP_LIBS when you link an executable or a libtool library and you'll need BES_CPPFLAGS when you compile (for libdap code)
  2. The trailing semicolon is not needed but including it makes automatic code indent software (eclipse, emacs, ...) much happier.

Start beslistener with Debuging on

Use the -d option to beslistener and give -d one argument, a string, with two parts: "<output sink>,<context>". For example,

beslistener -d "cerr,bes" -c ../etc/bes/bes.conf

would start up beslistener with the bes context active and write all the debugging info to cerr. You can provide several contexts. The BES has debug statements for bes, ppt and server contexts although I think you can add new ones if you want by just using them in the macro.

Send Commands to the BES

The new BES on the xmlrequest branch uses XML instead of the old sql-style commands. Start bescmdln and type commands to it but not the xml header and the <request> element. Here's and example:

BESClient> <setContext name="dap_format">dap2</setContext>
BESClient> <setContainer name="c" space="catalog">/data/nc/fnoc1.nc</setContainer>
BESClient> <define name="d"> <container name="c" /> </define>
BESClient> <get type="das" definition="d" />
Attributes {
    u {
        String units "meter per second";
        String long_name "Vector wind eastward component";