aboutsummaryrefslogtreecommitdiff
path: root/libbutl/backtrace.mxx
blob: 25d0dcdb9064751812bea656d1078d3217ac3e3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// file      : libbutl/backtrace.mxx -*- C++ -*-
// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#ifndef __cpp_modules_ts
#pragma once
#endif

// C includes.

#ifndef __cpp_lib_modules_ts
#include <string>
#endif

// Other includes.

#ifdef __cpp_modules_ts
export module butl.backtrace;
#ifdef __cpp_lib_modules_ts
import std.core;
#endif
#endif

#include <libbutl/export.hxx>

LIBBUTL_MODEXPORT namespace butl
{
  // Return the calling thread's backtrace or empty string if this
  // functionality is not supported or an error has occurred. The exact
  // backtrace format is implementation-defined; it normally contains a line
  // with the binary name, address in that binary, and, if available, the
  // function name for each stack frame.
  //
  // Currently this functionality is only available on Linux, FreeBSD, and Mac
  // OS. On the first two platforms the address can be mapped to the function
  // name and, if built with debug info, to source location using the
  // addr2line(1) utility:
  //
  // $ addr2line -f -C -e <binary> <addr>
  //
  LIBBUTL_SYMEXPORT std::string
  backtrace () noexcept;
}