0.6.0
Major changes:
- Added a runtime backtrace cache; backtraces are now deduplicated when profiling, which results in less data being generated.
- Added automatic culling of temporary allocations when running with
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS
set to1
. - Added support for
reallocarray
. - Added support for unwinding through JITed code, provided the JIT compiler registers its unwinding tables through
__register_frame
. - Added support for unwinding through frames which require arbitrary DWARF expressions to be evaluated when resolving register values.
- Added support for DWARF expressions that fetch memory.
- Allocations are not tracked by their addresses anymore; they're now tracked by unique IDs, which fixes a race condition when multiple threads are simultaneously allocating and deallocating memory in quick succession.
mmap
calls are now not gathered by default.- Rewrote TLS state management; some deallocations from TLS destructors which were previously missed by the profiler are now gathered.
- When profiling is disabled at runtime the profiler doesn't completely shutdown anymore, and will keep on gathering data for those allocations which were made before it was disabled; when reenabled it won't create a new file anymore and instead it will keep on writing to the same file as it did before it was disabled.
- The profiler now requires Rust nightly to compile.