256 Commits

Author SHA1 Message Date
Fedor Osetrov e93f50def8 feat boost.stacktrace: support import std (#231)
Support build with `import std;`. Add Github CI pipeline


---------

Co-authored-by: Fedor Osetrov <fdr400@Fedors-MacBook-Pro.local>
2026-05-11 12:09:09 +03:00
Fedor Osetrov f966b6a1e6 feat boost.stacktrace: C++20 modules support (#230)
- Introduce `boost.stacktrace_dump` module for safe_dump interface
- Introduce `boost.stacktrace_<backend>` module for each unwind/collect implementation method
- Introduce `boost.stacktrace` module exposing best available backend implementation

Also many tests was added for checking all available backend build and also header only library version
Moreover, there are some checks for `Boost::stacktrace_<backend>` and  `Boost::stacktrace_from_exception` compatibility

---------

Co-authored-by: Fedor Osetrov <fdr400@Fedors-MacBook-Pro.local>
2026-05-05 20:29:10 +03:00
Fedor Osetrov 8dd3018808 feat stacktrace: independent dump library (#227)
This pull request introduces `boost_stacktrace_dump` library that is independent from backtrace implementations.
The purpose is to make `boost_stacktrace_from_exception` also independent from specific backtrace implementation to further introduce C++20 modules support.

As well, all stacktrace tests added to CMake CI. Header only library test also was added to CMake test.
2026-04-28 15:00:43 +03:00
Antony Polukhin 902537345a Update copyright years 2026-01-04 11:21:08 +03:00
Jonathan Wakely cec57009ef Fix URL in libbacktrace_impls.hpp (#214)
The double slash in the URL redirects to the bugzilla main page.
2025-10-29 22:44:29 +03:00
Orgad Shaneh 07bc960cfe Add missing cstdint header (#207)
Fixes https://github.com/boostorg/boost/issues/1044
2025-06-01 09:38:06 +03:00
Antony Polukhin ea282324b8 Fix some warnings on MSVC (#201) 2025-01-11 12:36:57 +03:00
Antony Polukhin 9e7a98a61a Update copyright years 2025-01-08 19:54:11 +03:00
Maciej Czarnecki b170b28479 Use Relative Virtual Addresses to allow their decoding without knowing the base address (#200)
Instead of printing absolute addresses use relative ones so they can be used later to decode the stack trace.

## Motivation

It’s quite common to release apps without debug symbols while keeping them internally. Currently the lib prints absolute addresses which require the base address to decode them using symbols. With this change, the base address won’t be needed as values are relative to the beginning of the loaded module/binary.

The implementation for unix is **straightforward** as the existing code is used. For Windows, I’ve implemented similar logic using Windows API.

## Manual testing of Windows implementation

Here are 2 runs of `trivial_windbg_lib.exe` with .pdb and without .pdb file:

```jsx
>./trivial_windbg_lib.exe
 0# boost::stacktrace::basic_stacktrace<std::allocator<boost::stacktrace::frame> >::init at C:\Users\czarneckim\repositories\boost\boost\stacktrace\stacktrace.hpp:110
 1# main at C:\Users\czarneckim\repositories\boost\libs\stacktrace\test\test_trivial.cpp:14
 2# __scrt_common_main_seh at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
 3# BaseThreadInitThunk in C:\WINDOWS\System32\KERNEL32.DLL
 4# RtlUserThreadStart in C:\WINDOWS\SYSTEM32\ntdll.dll

> mv ./trivial_windbg_lib.pdb{,_} 
> ./trivial_windbg_lib.exe
 0# 0x0000000000001DE3 in C:\Users\czarneckim\repositories\boost\bin.v2\libs\stacktrace\test\trivial_windbg_lib.test\msvc-14.3\release\x86_64\asynch-exceptions-on\cxxstd-latest-iso\debug-symbols-on\threading-multi\trivial_windbg_lib.exe
 1# 0x0000000000001FEE in C:\Users\czarneckim\repositories\boost\bin.v2\libs\stacktrace\test\trivial_windbg_lib.test\msvc-14.3\release\x86_64\asynch-exceptions-on\cxxstd-latest-iso\debug-symbols-on\threading-multi\trivial_windbg_lib.exe
 2# 0x000000000000246C in C:\Users\czarneckim\repositories\boost\bin.v2\libs\stacktrace\test\trivial_windbg_lib.test\msvc-14.3\release\x86_64\asynch-exceptions-on\cxxstd-latest-iso\debug-symbols-on\threading-multi\trivial_windbg_lib.exe
 3# BaseThreadInitThunk in C:\WINDOWS\System32\KERNEL32.DLL
 4# RtlUserThreadStart in C:\WINDOWS\SYSTEM32\ntdll.dll

> mv ./trivial_windbg_lib.pdb{_,}
> winaddr2line.exe -f -e trivial_windbg_lib.pdb 0x0000000000001DE3
boost::stacktrace::basic_stacktrace<std::allocator<boost::stacktrace::frame> >::init
C:\Users\czarneckim\repositories\boost\boost\stacktrace\stacktrace.hpp:110
```

I’ve also decoded the returned address using x64dbg running `trivial_windbg_lib.exe+0x0000000000001DE3`:

![image](https://github.com/user-attachments/assets/a36d3306-488d-4610-9f04-7888b98c2b75)

## Control

As it was suggested in #180, the new logic is enabled by default, but can be disabled with `BOOST_STACKTRACE_DISABLE_OFFSET_ADDR_BASE` (With non header-only mode, it requires rebuilding the lib)
2025-01-07 23:59:16 +03:00
Daniel Krügler 8c4e50324c Use GetModuleNames to determine the full module path for msvc implementation 2024-12-22 01:24:02 +03:00
huangqinjin 464e224c2f Don't export boost_stacktrace_impl_return_nullptr for static build (#186)
Now `boost_stacktrace.lib` provides the symbol `boost_stacktrace_impl_return_nullptr` for static and shared build.

For header only library, to make the symbol available **automatically**, the only way AFAIK is to export it. We may also consider provide a configuration macro to opt-out the exported symbol, and user need to manually define the non-exported symbol somewhere in their binaries.

Closes #177 .
2024-09-13 20:42:31 +03:00
Antony Polukhin 3f79aee92f Revert fix attempt for #177 2024-09-12 22:27:45 +03:00
Antony Polukhin da94896d2d Fix attempt for #177 2024-09-12 22:00:21 +03:00
Antony Polukhin e95c2723d8 Add auto linking when using clang compiler under Visual Studio (fixes #100) 2024-09-12 11:15:03 +03:00
Jaroslaw Pelczar 981e37c218 Fix type conversions errors reported by GCC (#175)
This commit fixes errors when compiling with:
 -Wall -Werror -Wextra -Wconversion -Wsign-conversion

Signed-off-by: Jarosław Pelczar <jarek@jpelczar.com>
2024-09-01 17:22:07 +03:00
Antony Polukhin cbf0df774d Fix addr2line work when the process is looked up via PATH.
Fixes #72
2024-07-07 20:30:51 +03:00
Peter Dimov 34e56c4e90 Do not define BOOST_STACKTRACE_DYN_LINK when BOOST_STACKTRACE_STATIC_LINK is defined 2024-06-23 20:36:49 +03:00
Peter Dimov f32bd5a543 Define BOOST_STACKTRACE_LINK when BOOST_STACKTRACE_STATIC_LINK is defined. Refs #169. 2024-06-21 23:01:57 +03:00
Antony Polukhin 66c0f7a54f avoid memory leaks and make the code more C++ish 2024-06-12 18:13:01 +03:00
Clément Chigot aacfc2e557 Add dladdr minimal support for AIX
AIX doesn't provide dladdr syscall. This patch implements a minimal
version in order to be able to compile stacktrace.
2024-06-12 18:13:01 +03:00
Antony Polukhin 80af3a44c3 Fix shadowing (fixes #141) 2024-06-11 12:19:03 +03:00
Marat Abrarov 39afcefb64 Avoid inclusion of rarely used Windows SDK headers which can cause conflict with other code using Windows SDK. (#157)
Signed-off-by: Marat Abrarov <abrarov@gmail.com>
2024-04-16 11:47:28 +03:00
huangqinjin d1b7a61353 Implement stacktrace from current exception for MSVC (#159)
std::current_exception() makes a copy of current exception object
into returned std::exception_ptr. So the tracking of the original
exception object and its stacktrace are lost.
2024-04-16 11:39:07 +03:00
Antony Polukhin 824f0c0ea7 Clarify the async-signal-safety guarantees in docs (refs #131) (#154) 2024-02-29 20:47:13 +03:00
Antony Polukhin f783534b0f Fix frame_msvc.ipp compilation 2024-02-23 14:04:26 +03:00
Antony Polukhin 27093f24cb Update frame_msvc.ipp 2024-02-23 13:50:11 +03:00
Antony Polukhin f6d4e117cd Add missing include 2024-02-12 22:21:35 +03:00
Antony Polukhin 0d8aed6bc9 Library for getting stacktraces from arbitrary exceptions (#147) 2024-02-07 11:27:45 +03:00
Antony Polukhin 0ec802df84 Update copyright years 2024-01-07 13:03:02 +03:00
Francesco Ballarin 8b1699c9d3 Add missing cstdint include to detail/addr_base.hpp 2023-10-01 10:14:34 +02:00
yhsb2k dc5cd9d1f3 Fix build with MinGW-w64 12+. (#140)
For more details see: https://github.com/boostorg/stacktrace/issues/133

Accommodate mingw-llvm to this fix as well

macros defined by mingw-llvm 16 (https://github.com/mstorsjo/llvm-mingw):
#define __GNUC_MINOR__ 2
#define __GNUC_PATCHLEVEL__ 1
#define __GNUC__ 4

#define __clang_major__ 16
#define __clang_minor__ 0
#define __clang_patchlevel__ 0
2023-09-02 16:36:27 +03:00
ja2142 fbcd543b51 fix addr2line for pie binaries (#138) 2023-08-27 21:34:56 +03:00
Antony Polukhin 6a7510bd5e Do not produce and explicit hard error if compiler may not support some of the C++11 features 2023-08-27 15:26:56 +03:00
Alex abba18524f Modernize to cpp11 (#139)
Drop support for C++03

Boost.Stacktrace 1.84 now requires C++11.
2023-08-11 21:32:41 +03:00
Antony Polukhin 71da3cfd56 add C++03 deprecation warnings 2023-05-14 20:06:38 +03:00
Chocobo1 b9a0a12f1c Fix typo 2023-02-08 17:45:10 +08:00
Antony Polukhin 4cf47389c1 Update copyright years 2023-01-19 10:21:22 +03:00
Antony Polukhin d904d26f4f Fix multithreading flag detection for backtrace_create_state if BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC is defined 2023-01-18 17:16:51 +03:00
Antony Polukhin 308b7f6b08 allow forcing the static backtrace_state
References: https://github.com/boostorg/stacktrace/issues/118
2022-09-02 12:20:30 +03:00
Antony Polukhin b856a99f9f fix and make sure that boost/stacktrace/stacktrace.hpp header has no unresolved references
Fixes: https://github.com/boostorg/stacktrace/issues/116
2022-09-02 10:38:17 +03:00
Antony Polukhin cc4d16e2ad avoid strlen() calls by using the size-1 from GetNameByOffset
Refs: https://github.com/boostorg/stacktrace/issues/122
2022-09-01 19:02:46 +03:00
Alex Guteniev 9e8510076d BOOST_STACKTRACE_USE_WINDBG_CACHED support 2022-02-18 20:08:31 +02:00
Alex Guteniev a60ee55b36 Don't initialize COM
Resolve #121
2022-02-18 19:45:26 +02:00
Antony Polukhin 75b7986f97 update copyright years 2022-01-30 14:47:24 +03:00
Antony Polukhin a00587f4d7 update copyright years 2021-01-03 19:24:15 +03:00
Antony Polukhin 15f6b30f12 Better support for pre-C++11 builds on clang (fixes #102) 2020-12-19 14:35:28 +03:00
Jeremiah Rodriguez a8a4cefb52 Add support for disabled exceptions 2020-05-26 13:28:32 -07:00
Antony Polukhin ade7d54dc7 update copyright year 2020-01-18 14:11:02 +03:00
Antony Polukhin acf5b12d02 Replace tabs with spaces 2019-11-12 10:16:57 +03:00
Antony Polukhin 293e1f43f6 Typo fix 2019-07-26 19:01:10 +03:00