Debugging

Logging

Robot Raconteur provides powerful logging capabilities to help debug and diagnose issues.

Logging can be enabled using an environmental variable, a command line argument, or programmatically using the API.

The following log levels are supported:

  • TRACE: Very detailed logs. Only available in debug builds.

  • DEBUG: Detailed logs for debugging with information about caught exceptions.

  • INFO: Informational logs.

  • WARNING: Warnings that may indicate a problem.

  • ERROR: Errors that may indicate a problem.

  • FATAL: Errors that will cause the program to exit.

By default, the node is in WARNING log level.

To set the log level using an environmental variable:

Windows:

set ROBOTRACONTEUR_LOG_LEVEL=DEBUG

Linux or MacOS:

export ROBOTRACONTEUR_LOG_LEVEL=DEBUG

To set the log level using a command line argument:

python -m reynard_the_robot --robotraconteur-log-level=DEBUG

The command line arguments are configured by the ClientNodeSetup instance that is used to initialize the node. (In Python, the from RobotRaconteur.Client import * statement automatically creates a ClientNodeSetup instance.)

To set programmatically, use the one of the SetLogLevel functions in RobotRaconteurNode. See the API documentation for each programming language for more information.

In MATLAB, it is necessary to use the API to enable logging and send the log output to a file:

RobotRaconteur.SetLogLevel('DEBUG');
RobotRaconteur.OpenLogFile('log.txt');

Command Line Options

Robot Raconteur supports a number of command line options to help with debugging and diagnostics. See the Command Line Arguments Wiki Page for a full list of available command line options.

Python Debugging

Python uses two additional environmental variables to enable additional debugging capabilities:

  • ROBOTRACONTEUR_PYTHON_TRACEBACK_PRINT_EXC: Enables detailed tracebacks for exceptions caught by Robot Raconteur.

  • ROBOTRACONTEUR_PYTHON_ENABLE_DEBUGPY: Enable support for the Visual Studio Code debugger so that breakpoints will work with the Robot Raconteur thread pool threads.

The following is a normal configuration for debugging in Python:

Windows:

set ROBOTRACONTEUR_LOG_LEVEL=DEBUG
set ROBOTRACONTEUR_PYTHON_TRACEBACK_PRINT_EXC=1
set ROBOTRACONTEUR_PYTHON_ENABLE_DEBUGPY=TRUE

Linux or MacOS:

export ROBOTRACONTEUR_LOG_LEVEL=DEBUG
export ROBOTRACONTEUR_PYTHON_TRACEBACK_PRINT_EXC=1
export ROBOTRACONTEUR_PYTHON_ENABLE_DEBUGPY=TRUE

A sample Visual Studio Code launch configuration is shown below:

{
    "name": "Python Debugger: Current File",
    "type": "debugpy",
    "request": "launch",
    "program": "${file}",
    "console": "integratedTerminal",
    "env": {
        "ROBOTRACONTEUR_PYTHON_TRACEBACK_PRINT_EXC": "1",
        "ROBOTRACONTEUR_PYTHON_ENABLE_DEBUGPY": "TRUE",
        "ROBOTRACONTEUR_LOG_LEVEL": "WARNING"
    }
},

Taps

Robot Raconteur supports the use of taps to monitor and debug communication between clients and services. Taps send all log messages and message traffic to a local socket. A log recorder program can be used to record the log messages and message traffic to a file for later analysis.

See the Taps Wiki Page for more information on taps.