X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcommon%2FBackTrace.h;fp=src%2Fceph%2Fsrc%2Fcommon%2FBackTrace.h;h=372788e6b64e63a304dd5abb5292ff655e24b513;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/common/BackTrace.h b/src/ceph/src/common/BackTrace.h new file mode 100644 index 0000000..372788e --- /dev/null +++ b/src/ceph/src/common/BackTrace.h @@ -0,0 +1,48 @@ +#ifndef CEPH_BACKTRACE_H +#define CEPH_BACKTRACE_H + +#include "acconfig.h" +#include +#ifdef HAVE_EXECINFO_H +#include +#endif +#include + +namespace ceph { + +struct BackTrace { + const static int max = 100; + + int skip; + void *array[max]{}; + size_t size; + char **strings; + + explicit BackTrace(int s) : skip(s) { +#ifdef HAVE_EXECINFO_H + size = backtrace(array, max); + strings = backtrace_symbols(array, size); +#else + skip = 0; + size = 0; + strings = nullptr; +#endif + } + ~BackTrace() { + free(strings); + } + + BackTrace(const BackTrace& other); + const BackTrace& operator=(const BackTrace& other); + + void print(std::ostream& out) const; +}; + +inline std::ostream& operator<<(std::ostream& out, const BackTrace& bt) { + bt.print(out); + return out; +} + +} + +#endif