From 70515e16c177a40e1053285262ff34e10c33e57e Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Thu, 13 Sep 2012 14:47:23 -0700 Subject: [PATCH 1/1] common: add print_trace() for backtracing --- Makefile | 4 ++-- common.cc | 25 +++++++++++++++++++++++++ common.h | 2 ++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 common.cc diff --git a/Makefile b/Makefile index 2bd61ce2..f6a0837e 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ include common.mk OBJECTS = libthreads.o schedule.o model.o threads.o librace.o action.o \ nodestack.o clockvector.o main.o snapshot-interface.o cyclegraph.o \ datarace.o impatomic.o cmodelint.o \ - snapshot.o malloc.o mymemory.o + snapshot.o malloc.o mymemory.o common.o -CPPFLAGS += -Iinclude -I. +CPPFLAGS += -Iinclude -I. -rdynamic LDFLAGS = -ldl -lrt SHARED = -shared diff --git a/common.cc b/common.cc new file mode 100644 index 00000000..8cb649bb --- /dev/null +++ b/common.cc @@ -0,0 +1,25 @@ +#include +#include +#include + +#include "common.h" + +#define MAX_TRACE_LEN 100 + +/** Print a backtrace of the current program state. */ +void print_trace(void) +{ + void *array[MAX_TRACE_LEN]; + char **strings; + int size, i; + + size = backtrace(array, MAX_TRACE_LEN); + strings = backtrace_symbols(array, size); + + printf("\nDumping stack trace (%d frames):\n", size); + + for (i = 0; i < size; i++) + printf("\t%s\n", strings[i]); + + free(strings); +} diff --git a/common.h b/common.h index 017cb4f9..80bc9ad6 100644 --- a/common.h +++ b/common.h @@ -28,4 +28,6 @@ do { \ #define error_msg(...) fprintf(stderr, "Error: " __VA_ARGS__) +void print_trace(void); + #endif /* __COMMON_H__ */ -- 2.34.1