- Wheels for Python 3.15 are now published. (#342)
- Our locating of the
_PyRuntimesymbol has been made more robust. (#336) - An incompatibility with Python 3.15 introduced in 3.15.0b4 has been fixed. (#337)
- We now publish
abi3wheels for Python 3.12 and later. (#331) - Release builds of PyStack are now built with LTO (Link Time Optimization) enabled. (#330)
- Editable installs of PyStack are now built with
-Og(optimizations suitable for debugging) enabled. (#330)
- Replace Cython with nanobind for Python bindings, improving performance by eliminating round-trips between Python and C++. (#272)
- Add :ref:`support for Python subinterpreters <multiple-interpreters>`. When a process uses multiple interpreters (e.g. via Python 3.14's concurrent.interpreters module), stacks for all interpreters are now reported instead of just the main one. (#279)
- Python 3.15 is now supported. The wheels are not yet published because the ABI is not yet frozen. (#289)
- PyStack is now built against elfutils 0.195, up from 0.193. (#315)
- Fix compatibility with the Python 3.14 JIT compiler. (#277)
- Fix native mode stacks for Python 3.14's LLVM-generated
*_TAIL_CALL_*frames. (#277) - Fix
IndexErrorin traceback formatting when the source file has fewer lines than expected. (#191) - Fix an extra blank line sometimes being printed in the middle of a traceback. (#298)
- Provide wheels for free-threaded builds of Python 3.13 (#271)
- Add the Python 3.14 trove classifier to our package metadata (#269)
- Improve some error messages and log messages (#260, #258)
- Fix handling of duplicate
_PyRuntimesymbols when ctypes mmaps a statically linked Python interpreter's binary in order to create a trampoline. Previously this led to "Invalid address in remote process" errors. (#258)
- Correct a bug in our GitHub Actions workflow that prevented artifacts for 1.5.0 from being uploaded to PyPI. No changes have been made to the PyStack code itself since 1.5.0 (#250)
- Add a new
--native-lastcommand line flag to only show the C frames after the last Python frame. (#182) - Add support for Python 3.14 (#229)
- Support kernels that don't have CONFIG_CROSS_MEMORY_ATTACH set. (#240)
- We no longer provide x86-64 musllinux_1_1 wheels. The manylinux project dropped support for musllinux_1_1 on November 1st, 2024. (#237)
- We no longer provide Python 3.7 wheels. Python 3.7 has been end-of-life since June 2023. (#237)
- Fix incorrect file offset calculation when analyzing ELF files with non-standard ELF layouts. Previously, pystack would fail to correctly analyze Python binaries that had non-standard ELF layouts (for example when compiled with certain linker options). The fix properly accounts for PT_LOAD segment mappings when calculating file offsets. (#220)
- Improve handling of core files where we cannot determine the executable. (#221)
- Improve our ability to debug Python 3.13 processes when the
_Py_DebugOffsetscannot be located by accounting for a structure layout change in CPython 3.13.0rc3 (the reversion of the incremental cyclic garbage collector). (#213)
- Add support for Python 3.13 (#186)
- Add support for gzip compressed corefiles (#171)
- Add a new
--versioncommand line flag to show the version of pystack (#203) - Support debugging free-threading (a.k.a. "nogil") Python 3.13 builds. Note that PyStack can't itself be run with
python3.13t, it can only attach to apython3.13tprocess or core file from another interpreter. (#206)
- Fix a bug that was causing Python scripts executed directly via shebang to report the shell script as the executable. (#184)
- Heap corruption could cause PyStack to fail to generate a stack when
--localsmode was used. This has been fixed by falling back to a reasonable default when attempting to format the repr of a local variable causes a dereference of an invalid pointer. (#194) - Fix a crash when analysing processes where the eval loop has a shim frame at the bottom of the stack (#204)
- Add a patch to the bundled elfutils used to create wheels to account for a bug when analysing cores with interleaved segments (#153)
- Removed the unused
--selfflag. (#141) - Fix some instances when identifying the pthread id was failing in systems without GLIBC (#152)
- Fix several some race conditions when stopping threads in multithreaded programs (#155)
- Ensure log messages that contain non-UTF-8 data are not lost (#155)
- Add support for Python 3.12 (#108)
- Improve the performance of reading memory from running processes (#124)
- Improve the performance of reading memory from core files (#126)
- Allow building with older elfutils than 0.188 when building with glibc (for musl libc we still need newer versions). (#40)
- Improve error reporting when attaching to a process is forbidden. (#98)
- Fix a crash that could occur under some unusual conditions if elfutils could not unwind the stack. (#101)
- Drop a use of the f-string
=specifier, which wasn't introduced until Python 3.8 (running PyStack with Python 3.7 was failing because of this). (#92)
No significant changes.
- Initial release.