Rename stuff

This commit is contained in:
Jeremy 2023-07-02 13:37:30 -04:00
parent 6c950e0817
commit 69581c9d58
No known key found for this signature in database
GPG Key ID: BE03111EB7ED6E2E
17 changed files with 124 additions and 124 deletions

View File

@ -14,16 +14,16 @@ jobs:
target: [Debug] target: [Debug]
std: [11, 20] std: [11, 20]
unwind: [ unwind: [
LIBCPPTRACE_UNWIND_WITH_EXECINFO, CPPTRACE_UNWIND_WITH_EXECINFO,
LIBCPPTRACE_UNWIND_WITH_NOTHING, CPPTRACE_UNWIND_WITH_NOTHING,
] ]
symbols: [ symbols: [
LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE, CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE,
LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING, CPPTRACE_GET_SYMBOLS_WITH_NOTHING,
] ]
demangle: [ demangle: [
LIBCPPTRACE_DEMANGLE_WITH_CXXABI, CPPTRACE_DEMANGLE_WITH_CXXABI,
LIBCPPTRACE_DEMANGLE_WITH_NOTHING, CPPTRACE_DEMANGLE_WITH_NOTHING,
] ]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -51,19 +51,19 @@ jobs:
target: [Debug] target: [Debug]
std: [11, 20] std: [11, 20]
unwind: [ unwind: [
LIBCPPTRACE_UNWIND_WITH_WINAPI, CPPTRACE_UNWIND_WITH_WINAPI,
LIBCPPTRACE_UNWIND_WITH_NOTHING, CPPTRACE_UNWIND_WITH_NOTHING,
] ]
symbols: [ symbols: [
LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP, CPPTRACE_GET_SYMBOLS_WITH_DBGHELP,
LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING, CPPTRACE_GET_SYMBOLS_WITH_NOTHING,
] ]
demangle: [ demangle: [
# LIBCPPTRACE_DEMANGLE_WITH_CXXABI, # CPPTRACE_DEMANGLE_WITH_CXXABI,
LIBCPPTRACE_DEMANGLE_WITH_NOTHING, CPPTRACE_DEMANGLE_WITH_NOTHING,
] ]
exclude: exclude:
- demangle: LIBCPPTRACE_DEMANGLE_WITH_CXXABI - demangle: CPPTRACE_DEMANGLE_WITH_CXXABI
compiler: cl compiler: cl
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -80,7 +80,7 @@ jobs:
-D${{matrix.unwind}}=On ` -D${{matrix.unwind}}=On `
-D${{matrix.symbols}}=On ` -D${{matrix.symbols}}=On `
-D${{matrix.demangle}}=On -D${{matrix.demangle}}=On
msbuild .\libcpptrace.sln msbuild .\cpptrace.sln
build-linux-full-or-auto: build-linux-full-or-auto:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
@ -90,7 +90,7 @@ jobs:
compiler: [g++-10, clang++-14] compiler: [g++-10, clang++-14]
target: [Debug] target: [Debug]
std: [11, 20] std: [11, 20]
config: ["-DLIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On", ""] config: ["-DCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On", ""]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: dependencies - name: dependencies
@ -116,7 +116,7 @@ jobs:
std: [11, 20] std: [11, 20]
config: [""] config: [""]
exclude: exclude:
- config: -DLIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On # TODO - config: -DCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE=On # TODO
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Enable Developer Command Prompt - name: Enable Developer Command Prompt
@ -130,4 +130,4 @@ jobs:
-DCMAKE_CXX_COMPILER=${{matrix.compiler}} ` -DCMAKE_CXX_COMPILER=${{matrix.compiler}} `
-DCMAKE_CXX_STANDARD=${{matrix.std}} ` -DCMAKE_CXX_STANDARD=${{matrix.std}} `
${{matrix.config}} ${{matrix.config}}
msbuild .\libcpptrace.sln msbuild .\cpptrace.sln

View File

@ -5,7 +5,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12)
endif() endif()
project( project(
libcpptrace cpptrace
VERSION 1.0.0 VERSION 1.0.0
LANGUAGES CXX LANGUAGES CXX
) )
@ -47,23 +47,23 @@ target_compile_options(
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX /permissive-> $<$<CXX_COMPILER_ID:MSVC>:/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(CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE "" OFF)
option(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL "" OFF) option(CPPTRACE_GET_SYMBOLS_WITH_LIBDL "" OFF)
option(LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE "" OFF) option(CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE "" OFF)
option(LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP "" OFF) option(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP "" OFF)
option(LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING "" OFF) option(CPPTRACE_GET_SYMBOLS_WITH_NOTHING "" OFF)
option(LIBCPPTRACE_UNWIND_WITH_EXECINFO "" OFF) option(CPPTRACE_UNWIND_WITH_EXECINFO "" OFF)
option(LIBCPPTRACE_UNWIND_WITH_WINAPI "" OFF) option(CPPTRACE_UNWIND_WITH_WINAPI "" OFF)
option(LIBCPPTRACE_UNWIND_WITH_NOTHING "" OFF) option(CPPTRACE_UNWIND_WITH_NOTHING "" OFF)
option(LIBCPPTRACE_DEMANGLE_WITH_CXXABI "" OFF) option(CPPTRACE_DEMANGLE_WITH_CXXABI "" OFF)
option(LIBCPPTRACE_DEMANGLE_WITH_NOTHING "" 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(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 "") if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "")
# quotes used over <> because of a macro substitution issue where # 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 nothing is specified, attempt to use libbacktrace's full dump
if( if(
NOT ( NOT (
LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR
LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR
LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING OR CPPTRACE_GET_SYMBOLS_WITH_NOTHING OR
LIBCPPTRACE_UNWIND_WITH_EXECINFO OR CPPTRACE_UNWIND_WITH_EXECINFO OR
LIBCPPTRACE_UNWIND_WITH_WINAPI OR CPPTRACE_UNWIND_WITH_WINAPI OR
LIBCPPTRACE_UNWIND_WITH_NOTHING CPPTRACE_UNWIND_WITH_NOTHING
) )
) )
# Attempt to auto-config # Attempt to auto-config
if(HAS_BACKTRACE) 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") message(STATUS "Cpptrace auto config: Using libbacktrace for the full trace")
endif() endif()
endif() endif()
# =============================================== Autoconfig unwinding =============================================== # =============================================== 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( if(
NOT ( NOT (
LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR
LIBCPPTRACE_UNWIND_WITH_EXECINFO OR CPPTRACE_UNWIND_WITH_EXECINFO OR
LIBCPPTRACE_UNWIND_WITH_WINAPI OR CPPTRACE_UNWIND_WITH_WINAPI OR
LIBCPPTRACE_UNWIND_WITH_NOTHING CPPTRACE_UNWIND_WITH_NOTHING
) )
) )
# Attempt to auto-config # Attempt to auto-config
if(UNIX) if(UNIX)
if(HAS_EXECINFO) 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") message(STATUS "Cpptrace auto config: Using execinfo.h for unwinding")
else() else()
set(LIBCPPTRACE_UNWIND_WITH_NOTHING On) set(CPPTRACE_UNWIND_WITH_NOTHING On)
message(FATAL_ERROR "Cpptrace auto config: <execinfo.h> doesn't seem to be supported, stack tracing will not work. To compile anyway set LIBCPPTRACE_UNWIND_WITH_NOTHING.") message(FATAL_ERROR "Cpptrace auto config: <execinfo.h> doesn't seem to be supported, stack tracing will not work. To compile anyway set CPPTRACE_UNWIND_WITH_NOTHING.")
endif() endif()
elseif(WIN32) elseif(WIN32)
set(LIBCPPTRACE_UNWIND_WITH_WINAPI On) set(CPPTRACE_UNWIND_WITH_WINAPI On)
message(STATUS "Cpptrace auto config: Using winapi for unwinding") message(STATUS "Cpptrace auto config: Using winapi for unwinding")
endif() endif()
else() else()
@ -140,24 +140,24 @@ else()
endif() endif()
# =============================================== Autoconfig symbols =============================================== # =============================================== 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( if(
NOT ( NOT (
LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE OR
LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE OR
LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING CPPTRACE_GET_SYMBOLS_WITH_NOTHING
) )
) )
# Attempt to auto-config # Attempt to auto-config
if(UNIX) if(UNIX)
if(HAS_BACKTRACE) 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") message(STATUS "Cpptrace auto config: Using libbacktrace for symbols")
else() 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() endif()
elseif(WIN32) elseif(WIN32)
#set(LIBCPPTRACE_UNWIND_WITH_WINAPI On) #set(CPPTRACE_UNWIND_WITH_WINAPI On)
#message(STATUS "Cpptrace auto config: Using winapi for unwinding") #message(STATUS "Cpptrace auto config: Using winapi for unwinding")
endif() endif()
else() else()
@ -168,14 +168,14 @@ endif()
# Handle demangle configuration # Handle demangle configuration
if( if(
NOT ( NOT (
LIBCPPTRACE_DEMANGLE_WITH_CXXABI OR CPPTRACE_DEMANGLE_WITH_CXXABI OR
LIBCPPTRACE_DEMANGLE_WITH_NOTHING CPPTRACE_DEMANGLE_WITH_NOTHING
) )
) )
if(HAS_CXXABI) if(HAS_CXXABI)
set(LIBCPPTRACE_DEMANGLE_WITH_CXXABI On) set(CPPTRACE_DEMANGLE_WITH_CXXABI On)
else() else()
set(LIBCPPTRACE_DEMANGLE_WITH_NOTHING On) set(CPPTRACE_DEMANGLE_WITH_NOTHING On)
endif() endif()
else() else()
#message(STATUS "Manual demangling back-end specified") #message(STATUS "Manual demangling back-end specified")
@ -186,77 +186,77 @@ endif()
function(check_backtrace_error) function(check_backtrace_error)
if(NOT HAS_BACKTRACE) if(NOT HAS_BACKTRACE)
if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "") 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() 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()
endif() endif()
endfunction() endfunction()
# Full # Full
if(LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE) if(CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE)
check_backtrace_error() 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) target_link_libraries(cpptrace PRIVATE backtrace)
endif() endif()
# Symbols # Symbols
if(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) if(CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE)
check_backtrace_error() check_backtrace_error()
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE) target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE)
endif() endif()
if(LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL) if(CPPTRACE_GET_SYMBOLS_WITH_LIBDL)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL) target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBDL)
endif() endif()
if(LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) if(CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE) target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE)
endif() endif()
if(LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP) if(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP) target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_DBGHELP)
target_link_libraries(cpptrace PRIVATE dbghelp) target_link_libraries(cpptrace PRIVATE dbghelp)
endif() endif()
if(LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING) if(CPPTRACE_GET_SYMBOLS_WITH_NOTHING)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING) target_compile_definitions(cpptrace PUBLIC CPPTRACE_GET_SYMBOLS_WITH_NOTHING)
endif() endif()
# Unwinding # Unwinding
if(LIBCPPTRACE_UNWIND_WITH_EXECINFO) if(CPPTRACE_UNWIND_WITH_EXECINFO)
if(NOT HAS_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() endif()
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_EXECINFO) target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_EXECINFO)
endif() endif()
if(LIBCPPTRACE_UNWIND_WITH_WINAPI) if(CPPTRACE_UNWIND_WITH_WINAPI)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_WINAPI) target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_WINAPI)
endif() endif()
if(LIBCPPTRACE_UNWIND_WITH_NOTHING) if(CPPTRACE_UNWIND_WITH_NOTHING)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_UNWIND_WITH_NOTHING) target_compile_definitions(cpptrace PUBLIC CPPTRACE_UNWIND_WITH_NOTHING)
endif() endif()
# Demangling # Demangling
if(LIBCPPTRACE_DEMANGLE_WITH_CXXABI) if(CPPTRACE_DEMANGLE_WITH_CXXABI)
if(NOT HAS_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() endif()
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_DEMANGLE_WITH_CXXABI) target_compile_definitions(cpptrace PUBLIC CPPTRACE_DEMANGLE_WITH_CXXABI)
endif() endif()
if(LIBCPPTRACE_DEMANGLE_WITH_NOTHING) if(CPPTRACE_DEMANGLE_WITH_NOTHING)
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_DEMANGLE_WITH_NOTHING) target_compile_definitions(cpptrace PUBLIC CPPTRACE_DEMANGLE_WITH_NOTHING)
endif() endif()
if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "") if(NOT "${LIBCPP_BACKTRACE_PATH}" STREQUAL "")
target_compile_definitions(cpptrace PUBLIC LIBCPP_BACKTRACE_PATH=${LIBCPP_BACKTRACE_PATH}) target_compile_definitions(cpptrace PUBLIC LIBCPP_BACKTRACE_PATH=${LIBCPP_BACKTRACE_PATH})
endif() endif()
if(NOT "${LIBCPPTRACE_HARD_MAX_FRAMES}" STREQUAL "") if(NOT "${CPPTRACE_HARD_MAX_FRAMES}" STREQUAL "")
target_compile_definitions(cpptrace PUBLIC LIBCPPTRACE_HARD_MAX_FRAMES=${LIBCPPTRACE_HARD_MAX_FRAMES}) target_compile_definitions(cpptrace PUBLIC CPPTRACE_HARD_MAX_FRAMES=${CPPTRACE_HARD_MAX_FRAMES})
endif() endif()
# ====================================================================================================================== # ======================================================================================================================

View File

@ -4,7 +4,7 @@
🚧 WIP 🏗️ 🚧 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. Make stack traces simple for once.
Support for MacOS and cygwin/mingw will be added soon. 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 ## Table of contents
- [libcpptrace](#libcpptrace) - [cpptrace](#cpptrace)
- [Table of contents](#table-of-contents) - [Table of contents](#table-of-contents)
- [Docs](#docs) - [Docs](#docs)
- [Backends](#backends) - [Backends](#backends)
@ -53,22 +53,22 @@ also manually set which back-end you want used.
| Library | CMake config | Windows | Linux | Info | | Library | CMake config | Windows | Linux | Info |
|---------|--------------|---------|-------|------| |---------|--------------|---------|-------|------|
| execinfo.h | `LIBCPPTRACE_UNWIND_WITH_EXECINFO` | ❌ | ✔️ | Frames are captured with `execinfo.h`'s `backtrace`, part of libc. | | execinfo.h | `CPPTRACE_UNWIND_WITH_EXECINFO` | ❌ | ✔️ | Frames are captured with `execinfo.h`'s `backtrace`, part of libc. |
| winapi | `LIBCPPTRACE_UNWIND_WITH_WINAPI` | ✔️ | ❌ | Frames are captured with `CaptureStackBackTrace`. | | winapi | `CPPTRACE_UNWIND_WITH_WINAPI` | ✔️ | ❌ | Frames are captured with `CaptureStackBackTrace`. |
| N/A | `LIBCPPTRACE_UNWIND_WITH_NOTHING` | ✔️ | ✔️ | Unwinding is not done, stack traces will be empty. | | 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 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** **Symbol resolution**
| Library | CMake config | Windows | Linux | Info | | 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. | | 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 | `LIBCPPTRACE_GET_SYMBOLS_WITH_LIBDL` | ❌ | ✔️ | Libdl uses dynamic export information. Compiling with `-rdynamic` is often needed. | | libdl | `CPPTRACE_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()`. | | addr2line | `CPPTRACE_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. | | dbghelp.h | `CPPTRACE_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. | | N/A | `CPPTRACE_GET_SYMBOLS_WITH_NOTHING` | ✔️ | ✔️ | No attempt is made to resolve symbols. |
**Demangling** **Demangling**
@ -77,14 +77,14 @@ mangled.
| Library | CMake config | Windows | Linux | Info | | Library | CMake config | Windows | Linux | Info |
|---------|--------------|---------|-------|------| |---------|--------------|---------|-------|------|
| cxxabi.h | `LIBCPPTRACE_DEMANGLE_WITH_CXXABI` | | | Should be available everywhere other than [msvc](https://godbolt.org/z/93ca9rcdz). | | cxxabi.h | `CPPTRACE_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. | | N/A | `CPPTRACE_DEMANGLE_WITH_NOTHING` | | | Don't attempt to do anything beyond what the symbol resolution back-end does. |
**Full tracing** **Full tracing**
Libbacktrace can generate a full stack trace itself, both unwinding and resolving symbols. This can be chosen with 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 `CPPTRACE_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`. 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 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. more back-ends can be added. Ideally this library can "just work" on systems, without additional installation work.

View File

@ -5,7 +5,7 @@
#include <vector> #include <vector>
#include <iostream> #include <iostream>
#ifndef LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE #ifndef CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE
#include "symbols/libcpp_symbols.hpp" #include "symbols/libcpp_symbols.hpp"
#include "unwind/libcpp_unwind.hpp" #include "unwind/libcpp_unwind.hpp"
@ -13,7 +13,7 @@
#include "platform/libcpp_common.hpp" #include "platform/libcpp_common.hpp"
namespace cpptrace { namespace cpptrace {
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<stacktrace_frame> generate_trace() { std::vector<stacktrace_frame> generate_trace() {
std::vector<void*> frames = detail::capture_frames(1); std::vector<void*> frames = detail::capture_frames(1);
std::vector<stacktrace_frame> trace; std::vector<stacktrace_frame> trace;
@ -35,7 +35,7 @@ namespace cpptrace {
#include "demangle/libcpp_demangle.hpp" #include "demangle/libcpp_demangle.hpp"
namespace cpptrace { namespace cpptrace {
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<stacktrace_frame> generate_trace() { std::vector<stacktrace_frame> generate_trace() {
auto trace = detail::generate_trace(1); auto trace = detail::generate_trace(1);
for(auto& entry : trace) { for(auto& entry : trace) {

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_DEMANGLE_WITH_CXXABI #ifdef CPPTRACE_DEMANGLE_WITH_CXXABI
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_demangle.hpp" #include "libcpp_demangle.hpp"

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_DEMANGLE_WITH_NOTHING #ifdef CPPTRACE_DEMANGLE_WITH_NOTHING
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_demangle.hpp" #include "libcpp_demangle.hpp"

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE #ifdef CPPTRACE_FULL_TRACE_WITH_LIBBACKTRACE
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_full_trace.hpp" #include "libcpp_full_trace.hpp"
@ -51,7 +51,7 @@ namespace cpptrace {
return state; return state;
} }
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<stacktrace_frame> generate_trace(size_t skip) { std::vector<stacktrace_frame> generate_trace(size_t skip) {
std::vector<stacktrace_frame> frames; std::vector<stacktrace_frame> frames;
skip++; // add one for this call skip++; // add one for this call

View File

@ -9,7 +9,7 @@
namespace cpptrace { namespace cpptrace {
namespace detail { namespace detail {
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<stacktrace_frame> generate_trace(size_t skip); std::vector<stacktrace_frame> generate_trace(size_t skip);
} }
} }

View File

@ -2,9 +2,9 @@
#define LIBCPP_COMMON_HPP #define LIBCPP_COMMON_HPP
#ifdef _MSC_VER #ifdef _MSC_VER
#define LIBCPPTRACE_FORCE_NO_INLINE __declspec(noinline) #define CPPTRACE_FORCE_NO_INLINE __declspec(noinline)
#else #else
#define LIBCPPTRACE_FORCE_NO_INLINE __attribute__((noinline)) #define CPPTRACE_FORCE_NO_INLINE __attribute__((noinline))
#endif #endif
#endif #endif

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_DBGHELP #ifdef CPPTRACE_GET_SYMBOLS_WITH_DBGHELP
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_symbols.hpp" #include "libcpp_symbols.hpp"

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE #ifdef CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_symbols.hpp" #include "libcpp_symbols.hpp"

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_GET_SYMBOLS_WITH_NOTHING #ifdef CPPTRACE_GET_SYMBOLS_WITH_NOTHING
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_symbols.hpp" #include "libcpp_symbols.hpp"

View File

@ -8,12 +8,12 @@
namespace cpptrace { namespace cpptrace {
namespace detail { namespace detail {
#ifdef LIBCPPTRACE_HARD_MAX_FRAMES #ifdef CPPTRACE_HARD_MAX_FRAMES
constexpr size_t hard_max_frames = LIBCPPTRACE_HARD_MAX_FRAMES; constexpr size_t hard_max_frames = CPPTRACE_HARD_MAX_FRAMES;
#else #else
constexpr size_t hard_max_frames = 100; constexpr size_t hard_max_frames = 100;
#endif #endif
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<void*> capture_frames(size_t skip); std::vector<void*> capture_frames(size_t skip);
} }
} }

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_UNWIND_WITH_EXECINFO #ifdef CPPTRACE_UNWIND_WITH_EXECINFO
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_unwind.hpp" #include "libcpp_unwind.hpp"
@ -11,7 +11,7 @@
namespace cpptrace { namespace cpptrace {
namespace detail { namespace detail {
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<void*> capture_frames(size_t skip) { std::vector<void*> capture_frames(size_t skip) {
std::vector<void*> frames(hard_max_frames + skip, nullptr); std::vector<void*> frames(hard_max_frames + skip, nullptr);
int n_frames = backtrace(frames.data(), hard_max_frames + skip); int n_frames = backtrace(frames.data(), hard_max_frames + skip);

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_UNWIND_WITH_NOTHING #ifdef CPPTRACE_UNWIND_WITH_NOTHING
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_unwind.hpp" #include "libcpp_unwind.hpp"

View File

@ -1,4 +1,4 @@
#ifdef LIBCPPTRACE_UNWIND_WITH_WINAPI #ifdef CPPTRACE_UNWIND_WITH_WINAPI
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include "libcpp_unwind.hpp" #include "libcpp_unwind.hpp"
@ -10,7 +10,7 @@
namespace cpptrace { namespace cpptrace {
namespace detail { namespace detail {
LIBCPPTRACE_FORCE_NO_INLINE CPPTRACE_FORCE_NO_INLINE
std::vector<void*> capture_frames(size_t skip) { std::vector<void*> capture_frames(size_t skip) {
std::vector<PVOID> addrs(hard_max_frames, nullptr); std::vector<PVOID> addrs(hard_max_frames, nullptr);
int frames = CaptureStackBackTrace(static_cast<DWORD>(skip + 1), hard_max_frames, addrs.data(), NULL); int frames = CaptureStackBackTrace(static_cast<DWORD>(skip + 1), hard_max_frames, addrs.data(), NULL);

View File

@ -5,7 +5,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12)
endif() endif()
project( project(
test-libcpptrace test-cpptrace
VERSION 1.0.0 VERSION 1.0.0
LANGUAGES CXX LANGUAGES CXX
) )
@ -22,8 +22,8 @@ target_link_libraries(test PRIVATE cpptrace)
target_include_directories(test PRIVATE ../include) target_include_directories(test PRIVATE ../include)
target_link_directories(test PRIVATE ../build) 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) 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}) message(STATUS "Copying lib from " ${CPPTRACE_PATH})
file(COPY ${CPPTRACE_PATH} DESTINATION .) file(COPY ${CPPTRACE_PATH} DESTINATION .)