From 69581c9d58a83ccabe67b028af067bf2595c181d Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sun, 2 Jul 2023 13:37:30 -0400 Subject: [PATCH] Rename stuff --- .github/workflows/build.yml | 34 +++--- CMakeLists.txt | 136 +++++++++++----------- README.md | 30 ++--- src/cpptrace.cpp | 6 +- src/demangle/demangle_with_cxxabi.cpp | 2 +- src/demangle/demangle_with_nothing.cpp | 2 +- src/full/full_trace_with_libbacktrace.cpp | 4 +- src/full/libcpp_full_trace.hpp | 2 +- src/platform/libcpp_common.hpp | 4 +- src/symbols/symbols_with_dbghelp.cpp | 2 +- src/symbols/symbols_with_libbacktrace.cpp | 2 +- src/symbols/symbols_with_nothing.cpp | 2 +- src/unwind/libcpp_unwind.hpp | 6 +- src/unwind/unwind_with_execinfo.cpp | 4 +- src/unwind/unwind_with_nothing.cpp | 2 +- src/unwind/unwind_with_winapi.cpp | 4 +- test/CMakeLists.txt | 6 +- 17 files changed, 124 insertions(+), 124 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d989c6..0933ffa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,16 +14,16 @@ jobs: target: [Debug] std: [11, 20] unwind: [ - LIBCPPTRACE_UNWIND_WITH_EXECINFO, - LIBCPPTRACE_UNWIND_WITH_NOTHING, + CPPTRACE_UNWIND_WITH_EXECINFO, + CPPTRACE_UNWIND_WITH_NOTHING, ] symbols: [ - LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE, - LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING, + CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE, + CPPTRACE_GET_SYMBOLS_WITH_NOTHING, ] demangle: [ - LIBCPPTRACE_DEMANGLE_WITH_CXXABI, - LIBCPPTRACE_DEMANGLE_WITH_NOTHING, + CPPTRACE_DEMANGLE_WITH_CXXABI, + CPPTRACE_DEMANGLE_WITH_NOTHING, ] steps: - uses: actions/checkout@v2 @@ -51,19 +51,19 @@ jobs: target: [Debug] std: [11, 20] unwind: [ - LIBCPPTRACE_UNWIND_WITH_WINAPI, - LIBCPPTRACE_UNWIND_WITH_NOTHING, + CPPTRACE_UNWIND_WITH_WINAPI, + CPPTRACE_UNWIND_WITH_NOTHING, ] symbols: [ - LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP, - LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING, + CPPTRACE_GET_SYMBOLS_WITH_DBGHELP, + CPPTRACE_GET_SYMBOLS_WITH_NOTHING, ] demangle: [ - # LIBCPPTRACE_DEMANGLE_WITH_CXXABI, - LIBCPPTRACE_DEMANGLE_WITH_NOTHING, + # CPPTRACE_DEMANGLE_WITH_CXXABI, + CPPTRACE_DEMANGLE_WITH_NOTHING, ] exclude: - - demangle: LIBCPPTRACE_DEMANGLE_WITH_CXXABI + - demangle: CPPTRACE_DEMANGLE_WITH_CXXABI compiler: cl steps: - uses: actions/checkout@v2 @@ -80,7 +80,7 @@ jobs: -D${{matrix.unwind}}=On ` -D${{matrix.symbols}}=On ` -D${{matrix.demangle}}=On - msbuild .\libcpptrace.sln + msbuild .\cpptrace.sln build-linux-full-or-auto: runs-on: ubuntu-22.04 @@ -90,7 +90,7 @@ jobs: compiler: [g++-10, clang++-14] target: [Debug] std: [11, 20] - config: ["-DLIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On", ""] + config: ["-DCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On", ""] steps: - uses: actions/checkout@v2 - name: dependencies @@ -116,7 +116,7 @@ jobs: std: [11, 20] config: [""] exclude: - - config: -DLIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On # TODO + - config: -DCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On # TODO steps: - uses: actions/checkout@v2 - name: Enable Developer Command Prompt @@ -130,4 +130,4 @@ jobs: -DCMAKE_CXX_COMPILER=${{matrix.compiler}} ` -DCMAKE_CXX_STANDARD=${{matrix.std}} ` ${{matrix.config}} - msbuild .\libcpptrace.sln + msbuild .\cpptrace.sln diff --git a/CMakeLists.txt b/CMakeLists.txt index 3750424..b1db750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12) endif() project( - libcpptrace + cpptrace VERSION 1.0.0 LANGUAGES CXX ) @@ -47,23 +47,23 @@ target_compile_options( $<$:/W4 /WX /permissive-> ) -option(LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE "" OFF) +option(CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE "" OFF) -option(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE "" OFF) -option(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL "" OFF) -option(LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE "" OFF) -option(LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP "" OFF) -option(LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING "" OFF) +option(CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE "" OFF) +option(CPPTRACE_GET_SYMBOLS_WITH_LIBDL "" OFF) +option(CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE "" OFF) +option(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP "" OFF) +option(CPPTRACE_GET_SYMBOLS_WITH_NOTHING "" OFF) -option(LIBCPPTRACE_UNWIND_WITH_EXECINFO "" OFF) -option(LIBCPPTRACE_UNWIND_WITH_WINAPI "" OFF) -option(LIBCPPTRACE_UNWIND_WITH_NOTHING "" OFF) +option(CPPTRACE_UNWIND_WITH_EXECINFO "" OFF) +option(CPPTRACE_UNWIND_WITH_WINAPI "" OFF) +option(CPPTRACE_UNWIND_WITH_NOTHING "" OFF) -option(LIBCPPTRACE_DEMANGLE_WITH_CXXABI "" OFF) -option(LIBCPPTRACE_DEMANGLE_WITH_NOTHING "" OFF) +option(CPPTRACE_DEMANGLE_WITH_CXXABI "" OFF) +option(CPPTRACE_DEMANGLE_WITH_NOTHING "" OFF) set(LIBCPP_BACKTRACE_PATH "" CACHE STRING "Path to backtrace.h, if the compiler doesn't already know it. Check /usr/lib/gcc/x86_64-linux-gnu/*/include.") -set(LIBCPPTRACE_HARD_MAX_FRAMES "" CACHE STRING "Hard limit on unwinding depth. Default is 100.") +set(CPPTRACE_HARD_MAX_FRAMES "" CACHE STRING "Hard limit on unwinding depth. Default is 100.") if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "") # quotes used over <> because of a macro substitution issue where @@ -97,42 +97,42 @@ check_support(HAS_CXXABI has_cxxabi.cpp "" "" "") # If nothing is specified, attempt to use libbacktrace's full dump if( NOT ( - LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR - LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR - LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING OR - LIBCPPTRACE_UNWIND_WITH_EXECINFO OR - LIBCPPTRACE_UNWIND_WITH_WINAPI OR - LIBCPPTRACE_UNWIND_WITH_NOTHING + CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR + CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR + CPPTRACE_GET_SYMBOLS_WITH_NOTHING OR + CPPTRACE_UNWIND_WITH_EXECINFO OR + CPPTRACE_UNWIND_WITH_WINAPI OR + CPPTRACE_UNWIND_WITH_NOTHING ) ) # Attempt to auto-config if(HAS_BACKTRACE) - set(LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE On) + set(CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE On) message(STATUS "Cpptrace auto config: Using libbacktrace for the full trace") endif() endif() # =============================================== Autoconfig unwinding =============================================== -# Unwind back-ends (If not doing LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) +# Unwind back-ends (If not doing CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) if( NOT ( - LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR - LIBCPPTRACE_UNWIND_WITH_EXECINFO OR - LIBCPPTRACE_UNWIND_WITH_WINAPI OR - LIBCPPTRACE_UNWIND_WITH_NOTHING + CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR + CPPTRACE_UNWIND_WITH_EXECINFO OR + CPPTRACE_UNWIND_WITH_WINAPI OR + CPPTRACE_UNWIND_WITH_NOTHING ) ) # Attempt to auto-config if(UNIX) if(HAS_EXECINFO) - set(LIBCPPTRACE_UNWIND_WITH_EXECINFO On) + set(CPPTRACE_UNWIND_WITH_EXECINFO On) message(STATUS "Cpptrace auto config: Using execinfo.h for unwinding") else() - set(LIBCPPTRACE_UNWIND_WITH_NOTHING On) - message(FATAL_ERROR "Cpptrace auto config: doesn't seem to be supported, stack tracing will not work. To compile anyway set LIBCPPTRACE_UNWIND_WITH_NOTHING.") + set(CPPTRACE_UNWIND_WITH_NOTHING On) + message(FATAL_ERROR "Cpptrace auto config: doesn't seem to be supported, stack tracing will not work. To compile anyway set CPPTRACE_UNWIND_WITH_NOTHING.") endif() elseif(WIN32) - set(LIBCPPTRACE_UNWIND_WITH_WINAPI On) + set(CPPTRACE_UNWIND_WITH_WINAPI On) message(STATUS "Cpptrace auto config: Using winapi for unwinding") endif() else() @@ -140,24 +140,24 @@ else() endif() # =============================================== Autoconfig symbols =============================================== -# Symbol back-ends (If not doing LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) +# Symbol back-ends (If not doing CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) if( NOT ( - LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR - LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR - LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING + CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR + CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR + CPPTRACE_GET_SYMBOLS_WITH_NOTHING ) ) # Attempt to auto-config if(UNIX) if(HAS_BACKTRACE) - set(LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE On) + set(CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE On) message(STATUS "Cpptrace auto config: Using libbacktrace for symbols") else() - message(FATAL_ERROR "Cpptrace auto config: No symbol back end could be automatically configured. To compile anyway set LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING.") + message(FATAL_ERROR "Cpptrace auto config: No symbol back end could be automatically configured. To compile anyway set CPPTRACE_GET_SYMBOLS_WITH_NOTHING.") endif() elseif(WIN32) - #set(LIBCPPTRACE_UNWIND_WITH_WINAPI On) + #set(CPPTRACE_UNWIND_WITH_WINAPI On) #message(STATUS "Cpptrace auto config: Using winapi for unwinding") endif() else() @@ -168,14 +168,14 @@ endif() # Handle demangle configuration if( NOT ( - LIBCPPTRACE_DEMANGLE_WITH_CXXABI OR - LIBCPPTRACE_DEMANGLE_WITH_NOTHING + CPPTRACE_DEMANGLE_WITH_CXXABI OR + CPPTRACE_DEMANGLE_WITH_NOTHING ) ) if(HAS_CXXABI) - set(LIBCPPTRACE_DEMANGLE_WITH_CXXABI On) + set(CPPTRACE_DEMANGLE_WITH_CXXABI On) else() - set(LIBCPPTRACE_DEMANGLE_WITH_NOTHING On) + set(CPPTRACE_DEMANGLE_WITH_NOTHING On) endif() else() #message(STATUS "Manual demangling back-end specified") @@ -186,77 +186,77 @@ endif() function(check_backtrace_error) if(NOT HAS_BACKTRACE) if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "") - message(WARNING "Cpptrace: LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE specified but libbacktrace doesn't appear installed or configured properly.") + message(WARNING "Cpptrace: CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE specified but libbacktrace doesn't appear installed or configured properly.") else() - message(WARNING "Cpptrace: LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE specified but libbacktrace doesn't appear installed or configured properly. You may need to specify LIBCPP_BACKTRACE_PATH.") + message(WARNING "Cpptrace: CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE specified but libbacktrace doesn't appear installed or configured properly. You may need to specify LIBCPP_BACKTRACE_PATH.") endif() endif() endfunction() # Full -if(LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) +if(CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) check_backtrace_error() - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) target_link_libraries(cpptrace PRIVATE backtrace) endif() # Symbols -if(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) +if(CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) check_backtrace_error() - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) endif() -if(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL) +if(CPPTRACE_GET_SYMBOLS_WITH_LIBDL) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBDL) endif() -if(LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) +if(CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) endif() -if(LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP) +if(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_DBGHELP) target_link_libraries(cpptrace PRIVATE dbghelp) endif() -if(LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING) +if(CPPTRACE_GET_SYMBOLS_WITH_NOTHING) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_NOTHING) endif() # Unwinding -if(LIBCPPTRACE_UNWIND_WITH_EXECINFO) +if(CPPTRACE_UNWIND_WITH_EXECINFO) if(NOT HAS_EXECINFO) - message(WARNING "Cpptrace: LIBCPPTRACE_UNWIND_WITH_EXECINFO specified but execinfo.h doesn't seem to be available.") + message(WARNING "Cpptrace: CPPTRACE_UNWIND_WITH_EXECINFO specified but execinfo.h doesn't seem to be available.") endif() - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_EXECINFO) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_EXECINFO) endif() -if(LIBCPPTRACE_UNWIND_WITH_WINAPI) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_WINAPI) +if(CPPTRACE_UNWIND_WITH_WINAPI) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_WINAPI) endif() -if(LIBCPPTRACE_UNWIND_WITH_NOTHING) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_NOTHING) +if(CPPTRACE_UNWIND_WITH_NOTHING) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_NOTHING) endif() # Demangling -if(LIBCPPTRACE_DEMANGLE_WITH_CXXABI) +if(CPPTRACE_DEMANGLE_WITH_CXXABI) if(NOT HAS_CXXABI) - message(WARNING "Cpptrace: LIBCPPTRACE_DEMANGLE_WITH_CXXABI specified but cxxabi.h doesn't seem to be available.") + message(WARNING "Cpptrace: CPPTRACE_DEMANGLE_WITH_CXXABI specified but cxxabi.h doesn't seem to be available.") endif() - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_DEMANGLE_WITH_CXXABI) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_DEMANGLE_WITH_CXXABI) endif() -if(LIBCPPTRACE_DEMANGLE_WITH_NOTHING) - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_DEMANGLE_WITH_NOTHING) +if(CPPTRACE_DEMANGLE_WITH_NOTHING) + target_compile_definitions(cpptrace PUBLIC CPPTRACE_DEMANGLE_WITH_NOTHING) endif() if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "") target_compile_definitions(cpptrace PUBLIC LIBCPP_BACKTRACE_PATH=${LIBCPP_BACKTRACE_PATH}) endif() -if(NOT "${LIBCPPTRACE_HARD_MAX_FRAMES}" STREQUAL "") - target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_HARD_MAX_FRAMES=${LIBCPPTRACE_HARD_MAX_FRAMES}) +if(NOT "${CPPTRACE_HARD_MAX_FRAMES}" STREQUAL "") + target_compile_definitions(cpptrace PUBLIC CPPTRACE_HARD_MAX_FRAMES=${CPPTRACE_HARD_MAX_FRAMES}) endif() # ====================================================================================================================== diff --git a/README.md b/README.md index 564b5ea..361546d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 🚧 WIP 🏗️ -Libcpptrace is a lightweight C++ stacktrace library supporting C++11 and greater on Linux, Unix, and Windows. The goal: +Cpptrace is a lightweight C++ stacktrace library supporting C++11 and greater on Linux, Unix, and Windows. The goal: Make stack traces simple for once. Support for MacOS and cygwin/mingw will be added soon. @@ -13,7 +13,7 @@ Support for MacOS and cygwin/mingw will be added soon. ## Table of contents -- [libcpptrace](#libcpptrace) +- [cpptrace](#cpptrace) - [Table of contents](#table-of-contents) - [Docs](#docs) - [Backends](#backends) @@ -53,22 +53,22 @@ also manually set which back-end you want used. | Library | CMake config | Windows | Linux | Info | |---------|--------------|---------|-------|------| -| execinfo.h | `LIBCPPTRACE_UNWIND_WITH_EXECINFO` | ❌ | ✔️ | Frames are captured with `execinfo.h`'s `backtrace`, part of libc. | -| winapi | `LIBCPPTRACE_UNWIND_WITH_WINAPI` | ✔️ | ❌ | Frames are captured with `CaptureStackBackTrace`. | -| N/A | `LIBCPPTRACE_UNWIND_WITH_NOTHING` | ✔️ | ✔️ | Unwinding is not done, stack traces will be empty. | +| execinfo.h | `CPPTRACE_UNWIND_WITH_EXECINFO` | ❌ | ✔️ | Frames are captured with `execinfo.h`'s `backtrace`, part of libc. | +| winapi | `CPPTRACE_UNWIND_WITH_WINAPI` | ✔️ | ❌ | Frames are captured with `CaptureStackBackTrace`. | +| N/A | `CPPTRACE_UNWIND_WITH_NOTHING` | ✔️ | ✔️ | Unwinding is not done, stack traces will be empty. | Some back-ends require a fixed buffer has to be created to read addresses into while unwinding. By default the buffer -can hold addresses for 100 frames. This is configurable with `LIBCPPTRACE_HARD_MAX_FRAMES`. +can hold addresses for 100 frames. This is configurable with `CPPTRACE_HARD_MAX_FRAMES`. **Symbol resolution** | Library | CMake config | Windows | Linux | Info | |---------|--------------|---------|-------|------| -| libbacktrace | `LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE` | ❌ | ✔️ | Libbacktrace is already installed on most systems, or available through the compiler directly. If it is installed but backtrace.h is not already in the include path (this can happen when using clang when backtrace lives in gcc's include folder), `LIBCPP_BACKTRACE_PATH` can be used to specify where the library should be looked for. | -| libdl | `LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL` | ❌ | ✔️ | Libdl uses dynamic export information. Compiling with `-rdynamic` is often needed. | -| addr2line | `LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE` | ❌ | ✔️ | Symbols are resolved by invoking `addr2line` via `fork()`. | -| dbghelp.h | `LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP` | ✔️ | ❌ | Dbghelp.h allows access to symbols via debug info. | -| N/A | `LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING` | ✔️ | ✔️ | No attempt is made to resolve symbols. | +| libbacktrace | `CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE` | ❌ | ✔️ | Libbacktrace is already installed on most systems, or available through the compiler directly. If it is installed but backtrace.h is not already in the include path (this can happen when using clang when backtrace lives in gcc's include folder), `LIBCPP_BACKTRACE_PATH` can be used to specify where the library should be looked for. | +| libdl | `CPPTRACE_GET_SYMBOLS_WITH_LIBDL` | ❌ | ✔️ | Libdl uses dynamic export information. Compiling with `-rdynamic` is often needed. | +| addr2line | `CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE` | ❌ | ✔️ | Symbols are resolved by invoking `addr2line` via `fork()`. | +| dbghelp.h | `CPPTRACE_GET_SYMBOLS_WITH_DBGHELP` | ✔️ | ❌ | Dbghelp.h allows access to symbols via debug info. | +| N/A | `CPPTRACE_GET_SYMBOLS_WITH_NOTHING` | ✔️ | ✔️ | No attempt is made to resolve symbols. | **Demangling** @@ -77,14 +77,14 @@ mangled. | Library | CMake config | Windows | Linux | Info | |---------|--------------|---------|-------|------| -| cxxabi.h | `LIBCPPTRACE_DEMANGLE_WITH_CXXABI` | | | Should be available everywhere other than [msvc](https://godbolt.org/z/93ca9rcdz). | -| N/A | `LIBCPPTRACE_DEMANGLE_WITH_NOTHING` | | | Don't attempt to do anything beyond what the symbol resolution back-end does. | +| cxxabi.h | `CPPTRACE_DEMANGLE_WITH_CXXABI` | | | Should be available everywhere other than [msvc](https://godbolt.org/z/93ca9rcdz). | +| N/A | `CPPTRACE_DEMANGLE_WITH_NOTHING` | | | Don't attempt to do anything beyond what the symbol resolution back-end does. | **Full tracing** Libbacktrace can generate a full stack trace itself, both unwinding and resolving symbols. This can be chosen with -`LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE`. This is also the first configuration the auto config attempts to use. Full -tracing with libbacktrace ignores `LIBCPPTRACE_HARD_MAX_FRAMES`. +`CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE`. This is also the first configuration the auto config attempts to use. Full +tracing with libbacktrace ignores `CPPTRACE_HARD_MAX_FRAMES`. There are plenty more libraries that can be used for unwinding, parsing debug information, and demangling. In the future more back-ends can be added. Ideally this library can "just work" on systems, without additional installation work. diff --git a/src/cpptrace.cpp b/src/cpptrace.cpp index f58f20f..71b1cff 100644 --- a/src/cpptrace.cpp +++ b/src/cpptrace.cpp @@ -5,7 +5,7 @@ #include #include -#ifndef LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE +#ifndef CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE #include "symbols/libcpp_symbols.hpp" #include "unwind/libcpp_unwind.hpp" @@ -13,7 +13,7 @@ #include "platform/libcpp_common.hpp" namespace cpptrace { - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector generate_trace() { std::vector frames = detail::capture_frames(1); std::vector trace; @@ -35,7 +35,7 @@ namespace cpptrace { #include "demangle/libcpp_demangle.hpp" namespace cpptrace { - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector generate_trace() { auto trace = detail::generate_trace(1); for(auto& entry : trace) { diff --git a/src/demangle/demangle_with_cxxabi.cpp b/src/demangle/demangle_with_cxxabi.cpp index 216eef3..7a05541 100644 --- a/src/demangle/demangle_with_cxxabi.cpp +++ b/src/demangle/demangle_with_cxxabi.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_DEMANGLE_WITH_CXXABI +#ifdef CPPTRACE_DEMANGLE_WITH_CXXABI #include #include "libcpp_demangle.hpp" diff --git a/src/demangle/demangle_with_nothing.cpp b/src/demangle/demangle_with_nothing.cpp index 6657af4..313f2a6 100644 --- a/src/demangle/demangle_with_nothing.cpp +++ b/src/demangle/demangle_with_nothing.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_DEMANGLE_WITH_NOTHING +#ifdef CPPTRACE_DEMANGLE_WITH_NOTHING #include #include "libcpp_demangle.hpp" diff --git a/src/full/full_trace_with_libbacktrace.cpp b/src/full/full_trace_with_libbacktrace.cpp index ccf73fa..252e853 100644 --- a/src/full/full_trace_with_libbacktrace.cpp +++ b/src/full/full_trace_with_libbacktrace.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE +#ifdef CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE #include #include "libcpp_full_trace.hpp" @@ -51,7 +51,7 @@ namespace cpptrace { return state; } - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector generate_trace(size_t skip) { std::vector frames; skip++; // add one for this call diff --git a/src/full/libcpp_full_trace.hpp b/src/full/libcpp_full_trace.hpp index 2c4ac5b..b5c8a9d 100644 --- a/src/full/libcpp_full_trace.hpp +++ b/src/full/libcpp_full_trace.hpp @@ -9,7 +9,7 @@ namespace cpptrace { namespace detail { - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector generate_trace(size_t skip); } } diff --git a/src/platform/libcpp_common.hpp b/src/platform/libcpp_common.hpp index 2e367fe..61e57a1 100644 --- a/src/platform/libcpp_common.hpp +++ b/src/platform/libcpp_common.hpp @@ -2,9 +2,9 @@ #define LIBCPP_COMMON_HPP #ifdef _MSC_VER -#define LIBCPPTRACE_FORCE_NO_INLINE __declspec(noinline) +#define CPPTRACE_FORCE_NO_INLINE __declspec(noinline) #else -#define LIBCPPTRACE_FORCE_NO_INLINE __attribute__((noinline)) +#define CPPTRACE_FORCE_NO_INLINE __attribute__((noinline)) #endif #endif diff --git a/src/symbols/symbols_with_dbghelp.cpp b/src/symbols/symbols_with_dbghelp.cpp index 7fec22e..e6d5cfc 100644 --- a/src/symbols/symbols_with_dbghelp.cpp +++ b/src/symbols/symbols_with_dbghelp.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP +#ifdef CPPTRACE_GET_SYMBOLS_WITH_DBGHELP #include #include "libcpp_symbols.hpp" diff --git a/src/symbols/symbols_with_libbacktrace.cpp b/src/symbols/symbols_with_libbacktrace.cpp index c6b5e90..319e7ea 100644 --- a/src/symbols/symbols_with_libbacktrace.cpp +++ b/src/symbols/symbols_with_libbacktrace.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE +#ifdef CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE #include #include "libcpp_symbols.hpp" diff --git a/src/symbols/symbols_with_nothing.cpp b/src/symbols/symbols_with_nothing.cpp index 0c098f6..8ddccac 100644 --- a/src/symbols/symbols_with_nothing.cpp +++ b/src/symbols/symbols_with_nothing.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING +#ifdef CPPTRACE_GET_SYMBOLS_WITH_NOTHING #include #include "libcpp_symbols.hpp" diff --git a/src/unwind/libcpp_unwind.hpp b/src/unwind/libcpp_unwind.hpp index 299cf61..dcf209a 100644 --- a/src/unwind/libcpp_unwind.hpp +++ b/src/unwind/libcpp_unwind.hpp @@ -8,12 +8,12 @@ namespace cpptrace { namespace detail { - #ifdef LIBCPPTRACE_HARD_MAX_FRAMES - constexpr size_t hard_max_frames = LIBCPPTRACE_HARD_MAX_FRAMES; + #ifdef CPPTRACE_HARD_MAX_FRAMES + constexpr size_t hard_max_frames = CPPTRACE_HARD_MAX_FRAMES; #else constexpr size_t hard_max_frames = 100; #endif - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector capture_frames(size_t skip); } } diff --git a/src/unwind/unwind_with_execinfo.cpp b/src/unwind/unwind_with_execinfo.cpp index 88f2b15..5d8cd82 100644 --- a/src/unwind/unwind_with_execinfo.cpp +++ b/src/unwind/unwind_with_execinfo.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_UNWIND_WITH_EXECINFO +#ifdef CPPTRACE_UNWIND_WITH_EXECINFO #include #include "libcpp_unwind.hpp" @@ -11,7 +11,7 @@ namespace cpptrace { namespace detail { - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector capture_frames(size_t skip) { std::vector frames(hard_max_frames + skip, nullptr); int n_frames = backtrace(frames.data(), hard_max_frames + skip); diff --git a/src/unwind/unwind_with_nothing.cpp b/src/unwind/unwind_with_nothing.cpp index f2181cd..1146189 100644 --- a/src/unwind/unwind_with_nothing.cpp +++ b/src/unwind/unwind_with_nothing.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_UNWIND_WITH_NOTHING +#ifdef CPPTRACE_UNWIND_WITH_NOTHING #include #include "libcpp_unwind.hpp" diff --git a/src/unwind/unwind_with_winapi.cpp b/src/unwind/unwind_with_winapi.cpp index ae397fc..30f833f 100644 --- a/src/unwind/unwind_with_winapi.cpp +++ b/src/unwind/unwind_with_winapi.cpp @@ -1,4 +1,4 @@ -#ifdef LIBCPPTRACE_UNWIND_WITH_WINAPI +#ifdef CPPTRACE_UNWIND_WITH_WINAPI #include #include "libcpp_unwind.hpp" @@ -10,7 +10,7 @@ namespace cpptrace { namespace detail { - LIBCPPTRACE_FORCE_NO_INLINE + CPPTRACE_FORCE_NO_INLINE std::vector capture_frames(size_t skip) { std::vector addrs(hard_max_frames, nullptr); int frames = CaptureStackBackTrace(static_cast(skip + 1), hard_max_frames, addrs.data(), NULL); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 043d471..19051e4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -5,7 +5,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12) endif() project( - test-libcpptrace + test-cpptrace VERSION 1.0.0 LANGUAGES CXX ) @@ -22,8 +22,8 @@ target_link_libraries(test PRIVATE cpptrace) target_include_directories(test PRIVATE ../include) target_link_directories(test PRIVATE ../build) -file(GLOB_RECURSE CPPTRACE_PATHS ../build/cpptrace.dll ../build/libcpptrace.so ../build/**/cpptrace.dll ../build/**/libcpptrace.so) +file(GLOB_RECURSE CPPTRACE_PATHS ../build/cpptrace.dll ../build/cpptrace.so ../build/**/cpptrace.dll ../build/**/cpptrace.so) list(POP_BACK CPPTRACE_PATHS CPPTRACE_PATH) -#find_library(CPPTRACE_PATH NAMES "cpptrace.dll" "libcpptrace.so" PATHS ../build PATH_SUFFIXES Debug Release) +#find_library(CPPTRACE_PATH NAMES "cpptrace.dll" "cpptrace.so" PATHS ../build PATH_SUFFIXES Debug Release) message(STATUS "Copying lib from " ${CPPTRACE_PATH}) file(COPY ${CPPTRACE_PATH} DESTINATION .)