Rename stuff
This commit is contained in:
parent
6c950e0817
commit
69581c9d58
34
.github/workflows/build.yml
vendored
34
.github/workflows/build.yml
vendored
@ -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
|
||||||
|
|||||||
136
CMakeLists.txt
136
CMakeLists.txt
@ -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()
|
||||||
|
|
||||||
# ======================================================================================================================
|
# ======================================================================================================================
|
||||||
|
|||||||
30
README.md
30
README.md
@ -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.
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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 .)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user