Some tweaks and fixes

This commit is contained in:
Jeremy 2023-11-15 12:17:18 -05:00
parent 49c86921ce
commit 0084de0f05
No known key found for this signature in database
GPG Key ID: B4C8300FEC395042
4 changed files with 10 additions and 6 deletions

View File

@ -20,7 +20,8 @@ namespace libdl {
nullable<std::uint32_t>::null(),
nullable<std::uint32_t>::null(),
info.dli_fname ? info.dli_fname : "",
info.dli_sname ? info.dli_sname : ""
info.dli_sname ? info.dli_sname : "",
false
};
} else {
return {
@ -28,7 +29,8 @@ namespace libdl {
nullable<std::uint32_t>::null(),
nullable<std::uint32_t>::null(),
"",
""
"",
false
};
}
}

View File

@ -5,6 +5,7 @@
#include "../platform/utils.hpp"
#include <algorithm>
#include <climits>
#include <cstddef>
#include <vector>
@ -15,8 +16,9 @@ namespace detail {
CPPTRACE_FORCE_NO_INLINE
std::vector<frame_ptr> capture_frames(std::size_t skip, std::size_t max_depth) {
skip++;
std::vector<void*> addrs(std::min(hard_max_frames, skip + max_depth), nullptr);
const int n_frames = backtrace(addrs.data(), static_cast<int>(addrs.size())); // thread safe
std::vector<void*> addrs(skip + std::min(hard_max_frames, max_depth), nullptr);
// thread safe
const int n_frames = backtrace(addrs.data(), static_cast<int>(addrs.size()));
// I hate the copy here but it's the only way that isn't UB
std::vector<frame_ptr> frames(n_frames - skip, 0);
for(int i = skip; i < n_frames; i++) {

View File

@ -55,7 +55,7 @@ namespace detail {
CPPTRACE_FORCE_NO_INLINE
std::vector<frame_ptr> capture_frames(std::size_t skip, std::size_t max_depth) {
std::vector<frame_ptr> frames(std::min(hard_max_frames, max_depth), 0);
std::vector<frame_ptr> frames(skip + std::min(hard_max_frames, max_depth), 0);
unwind_state state{skip + 1, 0, frames};
_Unwind_Backtrace(unwind_callback, &state); // presumably thread-safe
frames.resize(state.count);

View File

@ -20,7 +20,7 @@ namespace cpptrace {
namespace detail {
CPPTRACE_FORCE_NO_INLINE
std::vector<frame_ptr> capture_frames(std::size_t skip, std::size_t max_depth) {
std::vector<void*> addrs(std::min(hard_max_frames, max_depth), nullptr);
std::vector<void*> addrs(skip + std::min(hard_max_frames, max_depth), nullptr);
int n_frames = CaptureStackBackTrace(
static_cast<ULONG>(skip + 1),
static_cast<ULONG>(addrs.size()),