Next: , Previous: , Up: Top   [Contents][Index]


8 Printing execution traces

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

Next: , Previous: , Up: Top   [Contents][Index]

This document describes version 0.9.0-devel.3 of CCExceptions.