Update README and add changelog

This commit is contained in:
Jeremy 2023-10-02 11:37:17 -04:00
parent 909ce8155f
commit 26ba20acac
No known key found for this signature in database
GPG Key ID: 3E11861CB34E158C
2 changed files with 61 additions and 11 deletions

50
CHANGELOG.md Normal file
View File

@ -0,0 +1,50 @@
# Changelog
- [Changelog](#changelog)
- [v0.2.0](#v020)
- [v0.1.1](#v011)
- [v0.1](#v01)
# v0.2.0
Key changes:
- Added libdwarf as a back-end so cpptrace doesn't have to rely on addr2line or libbacktrace
- Overhauled library's public-facing interface to make the library more useful
- Added `raw_trace` interface
- Added `object_trace` interface
- Added `stacktrace` interface
- Updated `generate_trace` to return a `stacktrace` rather than a vector of frames
- Added `generate_trace` counterparts for raw and object traces
- Added `generate_trace` overloads with max_depth
- Added interface for internal demangling utility
- Added cache mode configuration
- Added option to absorb internal trace exceptions (by default it absorbs)
- Added `cpptrace::exception`, which automatically generates and stores a stacktrace when thrown
- Added `exception_with_message`
- Added traced analogs for stdexcept errors: `logic_error`, `domain_error`, `invalid_argument`, `length_error`,
`out_of_range`, `runtime_error`, `range_error`, `overflow_error`, and `underflow_error`.
Other changes:
- Bundled libdwarf with cpptrace so the library can essentially be self-contained and not have to rely on libraries that
might not already be on a system
- Added StackWalk64 as an unwinding back-end on windows
- Added system for multiple symbol back-ends to be used, mainly for more complete stack traces on mingw
- Fixed sporadic line number reporting errors due to not adjusting the program counter from the unwinder
- Improved addr2line/atos invocation back-end on macos
- Lots of error handling improvements
- Performance improvements
- Updated default back-ends for most systems
- Removed full tracing backends
- Cleaned up library cmake
- Lots of internal cleanup and refactoring
- Improved library usage instructions in README
# v0.1.1
Fixed:
- Handle errors when object files don't exist or can't be opened for reading
- Handle paths with spaces when using addr2line on windows
# v0.1
Initial release of the library 🎉

View File

@ -86,7 +86,7 @@ include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
cpptrace cpptrace
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
GIT_TAG v0.2.0-beta2 # <HASH or TAG> GIT_TAG v0.2.0 # <HASH or TAG>
) )
FetchContent_MakeAvailable(cpptrace) FetchContent_MakeAvailable(cpptrace)
target_link_libraries(your_target cpptrace) target_link_libraries(your_target cpptrace)
@ -312,16 +312,16 @@ A note about performance: For handling of DWARF symbols there is a lot of room t
and time-memory tradeoffs. If you find the current implementation is either slow or using too much memory, I'd be happy and time-memory tradeoffs. If you find the current implementation is either slow or using too much memory, I'd be happy
to explore some of these options. to explore some of these options.
A couple things I'd like to fix in the future: A couple things I'd like to improve in the future:
- On MacOS .dSYM files are required - On MacOS .dSYM files are required
- On Windows when collecting symbols with dbghelp (msvc/clang) parameter types are almost perfect but due to limitations - On Windows when collecting symbols with dbghelp (msvc/clang) parameter types are almost perfect but due to limitations
in dbghelp the library cannot accurately show const and volatile qualifiers or rvalue references (these appear as in dbghelp the library cannot accurately show const and volatile qualifiers or rvalue references (these appear as
pointers). pointers).
- On Windows unwinding with `CaptureStackBackTrace` (msvc/clang) can sometimes produce program counters that are after
the call instruction. Execinfo suffers from the same problem, but libgcc's `_Unwind` provides a means to detect this. A couple features I'd like to add in the future:
I would like to find a solution on windows so stack traces are more accurate. - Tracing from signal handlers
- Support for universal binaries on macos (fat mach-o files) is hacky and inefficient at the moment. Libdwarf should be - Tracing other thread's stacks
adding proper support for these soon thanks to an awesome maintainer. - Showing inlined calls in the stack trace
### FAQ: What about C++23 `<stacktrace>`? ### FAQ: What about C++23 `<stacktrace>`?
@ -357,7 +357,7 @@ include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
cpptrace cpptrace
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
GIT_TAG v0.2.0-beta2 # <HASH or TAG> GIT_TAG v0.2.0 # <HASH or TAG>
) )
FetchContent_MakeAvailable(cpptrace) FetchContent_MakeAvailable(cpptrace)
target_link_libraries(your_target cpptrace) target_link_libraries(your_target cpptrace)
@ -373,7 +373,7 @@ information.
```sh ```sh
git clone https://github.com/jeremy-rifkin/cpptrace.git git clone https://github.com/jeremy-rifkin/cpptrace.git
git checkout v0.2.0-beta2 git checkout v0.2.0
mkdir cpptrace/build mkdir cpptrace/build
cd cpptrace/build cd cpptrace/build
cmake .. -DCMAKE_BUILD_TYPE=Release cmake .. -DCMAKE_BUILD_TYPE=Release
@ -409,7 +409,7 @@ you when installing new libraries.
```ps1 ```ps1
git clone https://github.com/jeremy-rifkin/cpptrace.git git clone https://github.com/jeremy-rifkin/cpptrace.git
git checkout v0.2.0-beta2 git checkout v0.2.0
mkdir cpptrace/build mkdir cpptrace/build
cd cpptrace/build cd cpptrace/build
cmake .. -DCMAKE_BUILD_TYPE=Release cmake .. -DCMAKE_BUILD_TYPE=Release
@ -427,7 +427,7 @@ To install just for the local user (or any custom prefix):
```sh ```sh
git clone https://github.com/jeremy-rifkin/cpptrace.git git clone https://github.com/jeremy-rifkin/cpptrace.git
git checkout v0.2.0-beta2 git checkout v0.2.0
mkdir cpptrace/build mkdir cpptrace/build
cd cpptrace/build cd cpptrace/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/wherever cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/wherever