When code using CCExceptions is compiled with the preprocessor macro CCEXCEPTIONS_TRACE
defined before including ccexceptions.h: some tracing features are enabled. It means debug
messages are printed on stderr following the execution path of raised exceptions representing
errors. The affected functions and macros are:
cce_location cce_raise cce_run_catch_handlers_raise cce_run_catch_handlers_final cce_run_body_handlers_raise cce_run_body_handlers_final
Tracing features are completely transparent to the client code: we must do nothing different when tracing is enabled.
As example, when the following code is run:
#define CCEXCEPTIONS_TRACE 1
#include <ccexceptions.h>
#include <stdio.h>
#include <stdlib.h>
void
test_tracing_sub_sub_sub (cce_destination_t upper_L)
{
cce_location_t L[1];
if (cce_location(L)) {
cce_run_catch_handlers_raise(L, upper_L);
} else {
cce_raise(L, cce_condition_new_unknown());
cce_run_body_handlers(L);
}
}
void
test_tracing_sub_sub (cce_destination_t upper_L)
{
cce_location_t L[1];
if (cce_location(L)) {
cce_run_catch_handlers_raise(L, upper_L);
} else {
test_tracing_sub_sub_sub(L);
cce_run_body_handlers(L);
}
}
void
test_tracing_sub (cce_destination_t upper_L)
{
cce_location_t L[1];
if (cce_location(L)) {
cce_run_catch_handlers_raise(L, upper_L);
} else {
test_tracing_sub_sub(L);
cce_run_body_handlers(L);
}
}
void
test_tracing (void)
{
cce_location_t L[1];
if (cce_location(L)) {
cce_run_catch_handlers_final(L);
} else {
test_tracing_sub(L);
cce_run_body_handlers(L);
}
}
int
main (void)
{
test_tracing();
}
it prints:
raising: ../tests/tracing.c:48, test_tracing_sub_sub_sub(): Unknown exceptional condition catching: ../tests/tracing.c:45, test_tracing_sub_sub_sub(): Unknown exceptional condition re-raising: ../tests/tracing.c:46, test_tracing_sub_sub_sub(): Unknown exceptional condition catching: ../tests/tracing.c:58, test_tracing_sub_sub(): Unknown exceptional condition re-raising: ../tests/tracing.c:59, test_tracing_sub_sub(): Unknown exceptional condition catching: ../tests/tracing.c:71, test_tracing_sub(): Unknown exceptional condition re-raising: ../tests/tracing.c:72, test_tracing_sub(): Unknown exceptional condition catching: ../tests/tracing.c:84, test_tracing(): Unknown exceptional condition finalising: ../tests/tracing.c:85, test_tracing(): Unknown exceptional condition
This document describes version 0.9.0-devel.3 of CCExceptions.