QuantLib: Debugging macros

A free/open-source library for quantitative finance Reference manual - version 1.20

Macros
Debugging macros
QuantLib macros

## Macros
#define | QL_TRACE_ENABLE
| enable tracing More...
#define | QL_TRACE_DISABLE
| disable tracing More...
#define | QL_TRACE_ON(out)
| set tracing stream More...
#define | QL_TRACE(message)
| output tracing information More...
#define | QL_TRACE_ENTER_FUNCTION
| output tracing information More...
#define | QL_TRACE_EXIT_FUNCTION
| output tracing information More...
#define | QL_TRACE_LOCATION
| output tracing information More...
#define | QL_TRACE_VARIABLE(variable)
| output tracing information More...

## Detailed Description

For debugging purposes, macros can be used to output information about the code being executed. Instrumenting code as in:

namespace Foo {
int bar(int i) {
QL_TRACE_ENTER_FUNCTION;
QL_TRACE_VARIABLE(i);
if (i == 42) {
QL_TRACE_LOCATION;
QL_TRACE("Right answer, but no question");
} else {
QL_TRACE_LOCATION;
QL_TRACE("Wrong answer");
i *= 2;
}
QL_TRACE_VARIABLE(i);
QL_TRACE_EXIT_FUNCTION;
return i;
}
}

will output a trace like the following when the code is run:

trace[3]: Entering int Foo::bar(int)
trace[3]: i = 21
trace[3]: At line 16 in tracing_example.cpp
trace[3]: Wrong answer
trace[3]: i = 42
trace[3]: Exiting int Foo::bar(int)

(the actual output will depend on the compiler and the file names). A word of warning must be added: adding so much tracing to your code might degrade its readability.

## Macro Definition Documentation

## ◆ QL_TRACE_ENABLE

#define QL_TRACE_ENABLE

enable tracing

The statement

QL_TRACE_ENABLE;

can be used to enable tracing. Such statement might be ignored; refer to QL_TRACE for details.

## ◆ QL_TRACE_DISABLE

#define QL_TRACE_DISABLE

disable tracing

The statement

QL_TRACE_DISABLE;

can be used to disable tracing. Such statement might be ignored; refer to QL_TRACE for details.

## ◆ QL_TRACE_ON

#define QL_TRACE_ON | ( |  | out | ) |

set tracing stream

The statement

QL_TRACE_ON(stream);

can be used to set the stream where tracing messages are output. Such statement might be ignored; refer to QL_TRACE for details.

## ◆ QL_TRACE

#define QL_TRACE | ( |  | message | ) |

output tracing information

The statement

QL_TRACE(message);

can be used to output a trace of the code being executed. If tracing was disabled during configuration, such statements are removed by the preprocessor for maximum performance; if it was enabled, whether and where the message is output depends on the current settings.

## ◆ QL_TRACE_ENTER_FUNCTION

#define QL_TRACE_ENTER_FUNCTION

output tracing information

The statement

QL_TRACE_ENTER_FUNCTION;

can be used at the beginning of a function to trace the fact that the program execution is entering such function. It should be paired with a corresponding QL_TRACE_EXIT_FUNCTION macro. Such statement might be ignored; refer to QL_TRACE for details. Also, function information might not be available depending on the compiler.

## ◆ QL_TRACE_EXIT_FUNCTION

#define QL_TRACE_EXIT_FUNCTION

output tracing information

The statement

QL_TRACE_EXIT_FUNCTION;

can be used before returning from a function to trace the fact that the program execution is exiting such function. It should be paired with a corresponding QL_TRACE_ENTER_FUNCTION macro. Such statement might be ignored; refer to QL_TRACE for details. Also, function information might not be available depending on the compiler.

## ◆ QL_TRACE_LOCATION

#define QL_TRACE_LOCATION

output tracing information

The statement

QL_TRACE_LOCATION;

can be used to trace the current file and line. Such statement might be ignored; refer to QL_TRACE for details.

## ◆ QL_TRACE_VARIABLE

#define QL_TRACE_VARIABLE | ( |  | variable | ) |

output tracing information

The statement

QL_TRACE_VARIABLE(variable);

can be used to trace the current value of a variable. Such statement might be ignored; refer to QL_TRACE for details. Also, the variable type must allow sending it to an output stream.