pystack 1.5.1__tar.gz → 1.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pystack-1.5.1 → pystack-1.7.0}/.bumpversion.cfg +1 -1
- pystack-1.7.0/.clang-format +97 -0
- pystack-1.7.0/.gitattributes +2 -0
- pystack-1.7.0/.gitignore +167 -0
- {pystack-1.5.1 → pystack-1.7.0}/.pre-commit-config.yaml +8 -8
- pystack-1.7.0/CMakeLists.txt +24 -0
- {pystack-1.5.1 → pystack-1.7.0}/MANIFEST.in +0 -1
- {pystack-1.5.1 → pystack-1.7.0}/NEWS.rst +38 -0
- {pystack-1.5.1 → pystack-1.7.0}/PKG-INFO +13 -18
- {pystack-1.5.1 → pystack-1.7.0}/README.md +6 -4
- pystack-1.7.0/news/.gitignore +1 -0
- {pystack-1.5.1 → pystack-1.7.0}/pyproject.toml +84 -18
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/__init__.py +2 -2
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/__main__.py +12 -12
- pystack-1.7.0/src/pystack/_pystack/CMakeLists.txt +71 -0
- pystack-1.7.0/src/pystack/_pystack/bindings.cpp +1117 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/corefile.cpp +2 -2
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/corefile.h +1 -1
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/code.h +0 -39
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/frame.h +15 -18
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/gc.h +0 -23
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/interpreter.h +0 -77
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/runtime.h +225 -14
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/thread.h +0 -67
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/elf_common.cpp +2 -2
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/elf_common.h +1 -1
- pystack-1.7.0/src/pystack/_pystack/interpreter.cpp +34 -0
- pystack-1.7.0/src/pystack/_pystack/interpreter.h +24 -0
- pystack-1.7.0/src/pystack/_pystack/logging.cpp +135 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/logging.h +4 -1
- pystack-1.7.0/src/pystack/_pystack/maps_parser.cpp +363 -0
- pystack-1.7.0/src/pystack/_pystack/maps_parser.h +44 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/mem.cpp +11 -48
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/mem.h +21 -23
- pystack-1.7.0/src/pystack/_pystack/native_frame.cpp +33 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/native_frame.h +5 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/process.cpp +182 -18
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/process.h +29 -7
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pyframe.cpp +23 -3
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pythread.cpp +55 -2
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pythread.h +2 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pytypes.cpp +1 -3
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/structure.h +4 -4
- pystack-1.7.0/src/pystack/_pystack/thread_builder.cpp +207 -0
- pystack-1.7.0/src/pystack/_pystack/thread_builder.h +75 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/unwinder.cpp +23 -6
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/unwinder.h +1 -1
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/version.cpp +157 -22
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/version.h +1 -0
- pystack-1.7.0/src/pystack/_pystack/version_detector.cpp +203 -0
- pystack-1.7.0/src/pystack/_pystack/version_detector.h +22 -0
- pystack-1.7.0/src/pystack/_pystack.pyi +96 -0
- pystack-1.7.0/src/pystack/_version.py +1 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/errors.py +24 -6
- pystack-1.7.0/src/pystack/maps.py +79 -0
- pystack-1.7.0/src/pystack/process.py +58 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/traceback_formatter.py +51 -22
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/types.py +5 -6
- pystack-1.7.0/valgrind.supp +66 -0
- pystack-1.5.1/Makefile +0 -156
- pystack-1.5.1/setup.cfg +0 -4
- pystack-1.5.1/setup.py +0 -146
- pystack-1.5.1/src/pystack/_pystack/CMakeLists.txt +0 -26
- pystack-1.5.1/src/pystack/_pystack/__init__.pxd +0 -0
- pystack-1.5.1/src/pystack/_pystack/corefile.pxd +0 -55
- pystack-1.5.1/src/pystack/_pystack/elf_common.pxd +0 -22
- pystack-1.5.1/src/pystack/_pystack/logging.cpp +0 -29
- pystack-1.5.1/src/pystack/_pystack/logging.pxd +0 -2
- pystack-1.5.1/src/pystack/_pystack/mem.pxd +0 -33
- pystack-1.5.1/src/pystack/_pystack/native_frame.pxd +0 -11
- pystack-1.5.1/src/pystack/_pystack/process.pxd +0 -41
- pystack-1.5.1/src/pystack/_pystack/pycode.pxd +0 -17
- pystack-1.5.1/src/pystack/_pystack/pyframe.pxd +0 -19
- pystack-1.5.1/src/pystack/_pystack/pythread.pxd +0 -37
- pystack-1.5.1/src/pystack/_pystack.pyi +0 -62
- pystack-1.5.1/src/pystack/_pystack.pyx +0 -782
- pystack-1.5.1/src/pystack/_version.py +0 -1
- pystack-1.5.1/src/pystack/maps.py +0 -327
- pystack-1.5.1/src/pystack/process.py +0 -180
- pystack-1.5.1/src/pystack.egg-info/PKG-INFO +0 -309
- pystack-1.5.1/src/pystack.egg-info/SOURCES.txt +0 -78
- pystack-1.5.1/src/pystack.egg-info/dependency_links.txt +0 -1
- pystack-1.5.1/src/pystack.egg-info/entry_points.txt +0 -2
- pystack-1.5.1/src/pystack.egg-info/top_level.txt +0 -1
- {pystack-1.5.1 → pystack-1.7.0}/LICENSE +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/compat.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/dict.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/float.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/int.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/list.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/object.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/pthread.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/string.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/cpython/tuple.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pycode.cpp +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pycode.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pycompat.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pyframe.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/_pystack/pytypes.h +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/colors.py +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/engine.py +0 -0
- {pystack-1.5.1 → pystack-1.7.0}/src/pystack/py.typed +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
BasedOnStyle: LLVM
|
|
2
|
+
Language: Cpp
|
|
3
|
+
AccessModifierOffset: -2
|
|
4
|
+
AlignAfterOpenBracket: AlwaysBreak
|
|
5
|
+
AlignConsecutiveAssignments: false
|
|
6
|
+
AlignConsecutiveDeclarations: false
|
|
7
|
+
AlignEscapedNewlines: Right
|
|
8
|
+
AlignOperands: true
|
|
9
|
+
AlignTrailingComments: false
|
|
10
|
+
AllowAllArgumentsOnNextLine: false
|
|
11
|
+
AllowAllParametersOfDeclarationOnNextLine: false
|
|
12
|
+
AllowShortBlocksOnASingleLine: false
|
|
13
|
+
AllowShortCaseLabelsOnASingleLine: false
|
|
14
|
+
AllowShortFunctionsOnASingleLine: None
|
|
15
|
+
AllowShortIfStatementsOnASingleLine: WithoutElse
|
|
16
|
+
AllowShortLoopsOnASingleLine: false
|
|
17
|
+
AlwaysBreakAfterReturnType: TopLevel
|
|
18
|
+
AlwaysBreakBeforeMultilineStrings: false
|
|
19
|
+
AlwaysBreakTemplateDeclarations: Yes
|
|
20
|
+
BinPackArguments: false
|
|
21
|
+
BinPackParameters: false
|
|
22
|
+
BraceWrapping:
|
|
23
|
+
AfterClass: true
|
|
24
|
+
AfterControlStatement: MultiLine
|
|
25
|
+
AfterEnum: false
|
|
26
|
+
AfterFunction: true
|
|
27
|
+
AfterNamespace: false
|
|
28
|
+
AfterStruct: true
|
|
29
|
+
AfterUnion: false
|
|
30
|
+
AfterExternBlock: false
|
|
31
|
+
BeforeCatch: false
|
|
32
|
+
BeforeElse: false
|
|
33
|
+
IndentBraces: false
|
|
34
|
+
SplitEmptyFunction: true
|
|
35
|
+
SplitEmptyRecord: true
|
|
36
|
+
SplitEmptyNamespace: true
|
|
37
|
+
BreakBeforeBinaryOperators: NonAssignment
|
|
38
|
+
BreakBeforeBraces: Custom
|
|
39
|
+
BreakBeforeInheritanceComma: false
|
|
40
|
+
BreakBeforeTernaryOperators: true
|
|
41
|
+
BreakConstructorInitializers: BeforeComma
|
|
42
|
+
BreakInheritanceList: BeforeComma
|
|
43
|
+
BreakStringLiterals: true
|
|
44
|
+
ColumnLimit: 105
|
|
45
|
+
CompactNamespaces: false
|
|
46
|
+
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
|
47
|
+
ConstructorInitializerIndentWidth: 0
|
|
48
|
+
ContinuationIndentWidth: 8
|
|
49
|
+
Cpp11BracedListStyle: true
|
|
50
|
+
DerivePointerAlignment: false
|
|
51
|
+
FixNamespaceComments: true
|
|
52
|
+
IncludeBlocks: Preserve
|
|
53
|
+
IncludeCategories:
|
|
54
|
+
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
|
55
|
+
Priority: 2
|
|
56
|
+
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
|
57
|
+
Priority: 3
|
|
58
|
+
- Regex: ".*"
|
|
59
|
+
Priority: 1
|
|
60
|
+
IndentCaseLabels: true
|
|
61
|
+
IndentGotoLabels: false
|
|
62
|
+
IndentPPDirectives: AfterHash
|
|
63
|
+
IndentWidth: 4
|
|
64
|
+
IndentWrappedFunctionNames: false
|
|
65
|
+
KeepEmptyLinesAtTheStartOfBlocks: false
|
|
66
|
+
MaxEmptyLinesToKeep: 1
|
|
67
|
+
NamespaceIndentation: None
|
|
68
|
+
PenaltyBreakAssignment: 2
|
|
69
|
+
PenaltyBreakBeforeFirstCallParameter: 19
|
|
70
|
+
PenaltyBreakComment: 300
|
|
71
|
+
PenaltyBreakFirstLessLess: 120
|
|
72
|
+
PenaltyBreakString: 1000
|
|
73
|
+
PenaltyBreakTemplateDeclaration: 10
|
|
74
|
+
PenaltyExcessCharacter: 1000000
|
|
75
|
+
PenaltyReturnTypeOnItsOwnLine: 60
|
|
76
|
+
PointerAlignment: Left
|
|
77
|
+
ReflowComments: true
|
|
78
|
+
SortIncludes: true
|
|
79
|
+
SortUsingDeclarations: true
|
|
80
|
+
SpaceAfterCStyleCast: false
|
|
81
|
+
SpaceAfterTemplateKeyword: false
|
|
82
|
+
SpaceBeforeAssignmentOperators: true
|
|
83
|
+
SpaceBeforeCpp11BracedList: false
|
|
84
|
+
SpaceBeforeCtorInitializerColon: true
|
|
85
|
+
SpaceBeforeInheritanceColon: true
|
|
86
|
+
SpaceBeforeParens: ControlStatements
|
|
87
|
+
SpaceBeforeRangeBasedForLoopColon: true
|
|
88
|
+
SpaceInEmptyParentheses: false
|
|
89
|
+
SpacesBeforeTrailingComments: 2
|
|
90
|
+
SpacesInAngles: false
|
|
91
|
+
SpacesInContainerLiterals: true
|
|
92
|
+
SpacesInCStyleCastParentheses: false
|
|
93
|
+
SpacesInParentheses: false
|
|
94
|
+
SpacesInSquareBrackets: false
|
|
95
|
+
Standard: Auto
|
|
96
|
+
TabWidth: 8
|
|
97
|
+
UseTab: Never
|
pystack-1.7.0/.gitignore
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# IDE stuff
|
|
2
|
+
|
|
3
|
+
.idea/*
|
|
4
|
+
|
|
5
|
+
# Cmake stuff
|
|
6
|
+
|
|
7
|
+
CMakeLists.txt.user
|
|
8
|
+
CMakeCache.txt
|
|
9
|
+
CMakeFiles
|
|
10
|
+
CMakeScripts
|
|
11
|
+
Testing
|
|
12
|
+
Makefile
|
|
13
|
+
cmake_install.cmake
|
|
14
|
+
install_manifest.txt
|
|
15
|
+
compile_commands.json
|
|
16
|
+
CTestTestfile.cmake
|
|
17
|
+
_deps
|
|
18
|
+
*.cbp
|
|
19
|
+
cmake-build-*/
|
|
20
|
+
|
|
21
|
+
# pip stuff
|
|
22
|
+
pip-wheel-metadata/
|
|
23
|
+
|
|
24
|
+
# Cython specific files
|
|
25
|
+
src/pystack/*.cpp
|
|
26
|
+
src/pystack/_pystack_api.h
|
|
27
|
+
|
|
28
|
+
# Byte-compiled / optimized / DLL files
|
|
29
|
+
__pycache__/
|
|
30
|
+
*.py[cod]
|
|
31
|
+
*$py.class
|
|
32
|
+
|
|
33
|
+
# C extensions
|
|
34
|
+
*.so
|
|
35
|
+
|
|
36
|
+
# Distribution / packaging
|
|
37
|
+
.Python
|
|
38
|
+
build/
|
|
39
|
+
develop-eggs/
|
|
40
|
+
dist/
|
|
41
|
+
downloads/
|
|
42
|
+
eggs/
|
|
43
|
+
.eggs/
|
|
44
|
+
lib/
|
|
45
|
+
lib64/
|
|
46
|
+
parts/
|
|
47
|
+
sdist/
|
|
48
|
+
var/
|
|
49
|
+
wheels/
|
|
50
|
+
share/python-wheels/
|
|
51
|
+
*.egg-info/
|
|
52
|
+
.installed.cfg
|
|
53
|
+
*.egg
|
|
54
|
+
MANIFEST
|
|
55
|
+
|
|
56
|
+
# PyInstaller
|
|
57
|
+
# Usually these files are written by a python script from a template
|
|
58
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
59
|
+
*.manifest
|
|
60
|
+
*.spec
|
|
61
|
+
|
|
62
|
+
# Installer logs
|
|
63
|
+
pip-log.txt
|
|
64
|
+
pip-delete-this-directory.txt
|
|
65
|
+
|
|
66
|
+
# Unit test / coverage reports
|
|
67
|
+
htmlcov/
|
|
68
|
+
.tox/
|
|
69
|
+
.nox/
|
|
70
|
+
.coverage
|
|
71
|
+
.coverage.*
|
|
72
|
+
.cache
|
|
73
|
+
nosetests.xml
|
|
74
|
+
coverage.xml
|
|
75
|
+
*.cover
|
|
76
|
+
*.py,cover
|
|
77
|
+
.hypothesis/
|
|
78
|
+
.pytest_cache/
|
|
79
|
+
cover/
|
|
80
|
+
pystack-coverage
|
|
81
|
+
*coverage.lcov
|
|
82
|
+
|
|
83
|
+
# Translations
|
|
84
|
+
*.mo
|
|
85
|
+
*.pot
|
|
86
|
+
|
|
87
|
+
# Django stuff:
|
|
88
|
+
*.log
|
|
89
|
+
local_settings.py
|
|
90
|
+
db.sqlite3
|
|
91
|
+
db.sqlite3-journal
|
|
92
|
+
|
|
93
|
+
# Flask stuff:
|
|
94
|
+
instance/
|
|
95
|
+
.webassets-cache
|
|
96
|
+
|
|
97
|
+
# Scrapy stuff:
|
|
98
|
+
.scrapy
|
|
99
|
+
|
|
100
|
+
# Sphinx documentation
|
|
101
|
+
docs/_build/
|
|
102
|
+
|
|
103
|
+
# PyBuilder
|
|
104
|
+
.pybuilder/
|
|
105
|
+
target/
|
|
106
|
+
|
|
107
|
+
# Jupyter Notebook
|
|
108
|
+
.ipynb_checkpoints
|
|
109
|
+
|
|
110
|
+
# IPython
|
|
111
|
+
profile_default/
|
|
112
|
+
ipython_config.py
|
|
113
|
+
|
|
114
|
+
# pyenv
|
|
115
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
116
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
117
|
+
# .python-version
|
|
118
|
+
|
|
119
|
+
# pipenv
|
|
120
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
121
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
122
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
123
|
+
# install all needed dependencies.
|
|
124
|
+
#Pipfile.lock
|
|
125
|
+
|
|
126
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
127
|
+
__pypackages__/
|
|
128
|
+
|
|
129
|
+
# Celery stuff
|
|
130
|
+
celerybeat-schedule
|
|
131
|
+
celerybeat.pid
|
|
132
|
+
|
|
133
|
+
# SageMath parsed files
|
|
134
|
+
*.sage.py
|
|
135
|
+
|
|
136
|
+
# Environments
|
|
137
|
+
.env
|
|
138
|
+
.venv
|
|
139
|
+
env/
|
|
140
|
+
venv/
|
|
141
|
+
ENV/
|
|
142
|
+
env.bak/
|
|
143
|
+
venv.bak/
|
|
144
|
+
|
|
145
|
+
# Spyder project settings
|
|
146
|
+
.spyderproject
|
|
147
|
+
.spyproject
|
|
148
|
+
|
|
149
|
+
# Rope project settings
|
|
150
|
+
.ropeproject
|
|
151
|
+
|
|
152
|
+
# mkdocs documentation
|
|
153
|
+
/site
|
|
154
|
+
|
|
155
|
+
# mypy
|
|
156
|
+
.mypy_cache/
|
|
157
|
+
.dmypy.json
|
|
158
|
+
dmypy.json
|
|
159
|
+
|
|
160
|
+
# Pyre type checker
|
|
161
|
+
.pyre/
|
|
162
|
+
|
|
163
|
+
# pytype static type analyzer
|
|
164
|
+
.pytype/
|
|
165
|
+
|
|
166
|
+
# Cython debug symbols
|
|
167
|
+
cython_debug/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
-
rev:
|
|
3
|
+
rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
|
|
4
4
|
hooks:
|
|
5
5
|
- id: check-added-large-files
|
|
6
6
|
- id: check-json
|
|
@@ -12,41 +12,41 @@ repos:
|
|
|
12
12
|
exclude: "^[.]bumpversion[.]cfg"
|
|
13
13
|
|
|
14
14
|
- repo: https://github.com/pre-commit/pygrep-hooks
|
|
15
|
-
rev: v1.10.0
|
|
15
|
+
rev: 3a6eb0fadf60b3cccfd80bad9dbb6fae7e47b316 # frozen: v1.10.0
|
|
16
16
|
hooks:
|
|
17
17
|
- id: rst-directive-colons
|
|
18
18
|
- id: rst-inline-touching-normal
|
|
19
19
|
|
|
20
20
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
|
21
|
-
rev: "v0.
|
|
21
|
+
rev: "5e2fb545eba1ea9dc051f6f962d52fe8f76a9794" # frozen: v0.15.13
|
|
22
22
|
hooks:
|
|
23
23
|
- id: ruff
|
|
24
24
|
args: [--fix, --exit-non-zero-on-fix]
|
|
25
25
|
stages: [pre-commit]
|
|
26
26
|
|
|
27
27
|
- repo: https://github.com/psf/black
|
|
28
|
-
rev:
|
|
28
|
+
rev: 87928e6d6761a4a6d22250e1fee5601b3998086e # frozen: 26.5.1
|
|
29
29
|
hooks:
|
|
30
30
|
- id: black
|
|
31
31
|
|
|
32
32
|
- repo: https://github.com/pycqa/isort
|
|
33
|
-
rev:
|
|
33
|
+
rev: dac090ce4d9ee313d086e2e89ab1acb8c2664fa1 # frozen: 9.0.0a3
|
|
34
34
|
hooks:
|
|
35
35
|
- id: isort
|
|
36
36
|
exclude_types: [python]
|
|
37
37
|
|
|
38
38
|
- repo: https://github.com/sphinx-contrib/sphinx-lint
|
|
39
|
-
rev:
|
|
39
|
+
rev: c883505f64b59c3c5c9375191e4ad9f98e727ccd # frozen: v1.0.2
|
|
40
40
|
hooks:
|
|
41
41
|
- id: sphinx-lint
|
|
42
42
|
|
|
43
43
|
- repo: https://github.com/executablebooks/mdformat/
|
|
44
|
-
rev: 0.
|
|
44
|
+
rev: 82912cdaea4fb830f751504486a7879c70526547 # frozen: 1.0.0
|
|
45
45
|
hooks:
|
|
46
46
|
- id: mdformat
|
|
47
47
|
|
|
48
48
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
49
|
-
rev:
|
|
49
|
+
rev: dd18dad857d6133e90bbe478f4f2f22ec0030269 # frozen: v22.1.5
|
|
50
50
|
hooks:
|
|
51
51
|
- id: clang-format
|
|
52
52
|
args: [--Werror, -i]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.17...3.27)
|
|
2
|
+
|
|
3
|
+
project(pystack LANGUAGES CXX)
|
|
4
|
+
|
|
5
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
6
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
7
|
+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
8
|
+
|
|
9
|
+
# Find Python
|
|
10
|
+
find_package(Python 3.9 COMPONENTS Interpreter Development.Module REQUIRED)
|
|
11
|
+
|
|
12
|
+
# Find nanobind
|
|
13
|
+
execute_process(
|
|
14
|
+
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
|
|
15
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE nanobind_ROOT)
|
|
16
|
+
find_package(nanobind CONFIG REQUIRED)
|
|
17
|
+
|
|
18
|
+
# Find libelf and libdw via pkg-config
|
|
19
|
+
find_package(PkgConfig REQUIRED)
|
|
20
|
+
pkg_check_modules(LIBELF REQUIRED libelf)
|
|
21
|
+
pkg_check_modules(LIBDW REQUIRED libdw)
|
|
22
|
+
|
|
23
|
+
# Add the extension module subdirectory
|
|
24
|
+
add_subdirectory(src/pystack/_pystack)
|
|
@@ -8,6 +8,44 @@ Changelog
|
|
|
8
8
|
|
|
9
9
|
.. towncrier release notes start
|
|
10
10
|
|
|
11
|
+
pystack 1.7.0 (2026-07-09)
|
|
12
|
+
--------------------------
|
|
13
|
+
|
|
14
|
+
Features
|
|
15
|
+
~~~~~~~~
|
|
16
|
+
|
|
17
|
+
- Replace Cython with nanobind for Python bindings, improving performance by eliminating round-trips between Python and C++. (#272)
|
|
18
|
+
- 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)
|
|
19
|
+
- Python 3.15 is now supported. The wheels are not yet published because the ABI is not yet frozen. (#289)
|
|
20
|
+
- PyStack is now built against elfutils 0.195, up from 0.193. (#315)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
Bug Fixes
|
|
24
|
+
~~~~~~~~~
|
|
25
|
+
|
|
26
|
+
- Fix compatibility with the Python 3.14 JIT compiler. (#277)
|
|
27
|
+
- Fix native mode stacks for Python 3.14's LLVM-generated ``*_TAIL_CALL_*`` frames. (#277)
|
|
28
|
+
- Fix ``IndexError`` in traceback formatting when the source file has fewer lines than expected. (#191)
|
|
29
|
+
- Fix an extra blank line sometimes being printed in the middle of a traceback. (#298)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
pystack 1.6.0 (2026-01-25)
|
|
33
|
+
--------------------------
|
|
34
|
+
|
|
35
|
+
Features
|
|
36
|
+
~~~~~~~~
|
|
37
|
+
|
|
38
|
+
- Provide wheels for free-threaded builds of Python 3.13 (#271)
|
|
39
|
+
- Add the Python 3.14 trove classifier to our package metadata (#269)
|
|
40
|
+
- Improve some error messages and log messages (#260, #258)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
Bug Fixes
|
|
44
|
+
~~~~~~~~~
|
|
45
|
+
|
|
46
|
+
- Fix handling of duplicate ``_PyRuntime`` symbols 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)
|
|
47
|
+
|
|
48
|
+
|
|
11
49
|
pystack 1.5.1 (2025-08-18)
|
|
12
50
|
--------------------------
|
|
13
51
|
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: pystack
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.0
|
|
4
4
|
Summary: Analysis of the stack of remote python processes
|
|
5
|
-
Home-page: https://github.com/bloomberg/pystack
|
|
6
5
|
Author: Pablo Galindo Salgado
|
|
6
|
+
License: Apache-2.0
|
|
7
7
|
Classifier: Intended Audience :: Developers
|
|
8
8
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
9
9
|
Classifier: Operating System :: POSIX :: Linux
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.9
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
16
17
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
17
18
|
Classifier: Topic :: Software Development :: Debuggers
|
|
18
|
-
|
|
19
|
+
Project-URL: Homepage, https://github.com/bloomberg/pystack
|
|
20
|
+
Requires-Python: >=3.9
|
|
19
21
|
Description-Content-Type: text/markdown
|
|
20
|
-
License-File: LICENSE
|
|
21
|
-
Dynamic: author
|
|
22
|
-
Dynamic: classifier
|
|
23
|
-
Dynamic: description
|
|
24
|
-
Dynamic: description-content-type
|
|
25
|
-
Dynamic: home-page
|
|
26
|
-
Dynamic: license-file
|
|
27
|
-
Dynamic: requires-python
|
|
28
|
-
Dynamic: summary
|
|
29
22
|
|
|
30
23
|
<p align="center">
|
|
31
24
|
<img src="https://user-images.githubusercontent.com/11718525/226942590-de015c9a-4d5b-4960-9c42-8c1eac0845c1.png" width="70%">
|
|
@@ -57,6 +50,7 @@ PyStack has the following amazing features:
|
|
|
57
50
|
- 🧵 Shows if each thread currently holds the Python GIL, is waiting to acquire it, or is currently
|
|
58
51
|
dropping it.
|
|
59
52
|
- 🗑️ Shows if a thread is running a garbage collection cycle.
|
|
53
|
+
- 🪆 Reports on multiple interpreters in the same process.
|
|
60
54
|
- 🐍 Optionally shows native function calls, as well as Python ones. In this mode, PyStack prints
|
|
61
55
|
the native stack trace (C/C++/Rust function calls), except that the calls to Python callables are
|
|
62
56
|
replaced with frames showing the Python code being executed, instead of showing the internal C
|
|
@@ -113,18 +107,17 @@ cd pystack
|
|
|
113
107
|
python3 -m venv ../pystack-env/ # just an example, put this wherever you want
|
|
114
108
|
source ../pystack-env/bin/activate
|
|
115
109
|
python3 -m pip install --upgrade pip
|
|
116
|
-
python3 -m pip install -e .
|
|
117
|
-
python3 -m pip install -r requirements-test.txt -r requirements-extra.txt
|
|
110
|
+
python3 -m pip install -e . --group test --group extra
|
|
118
111
|
```
|
|
119
112
|
|
|
120
113
|
This will install PyStack in the virtual environment in development mode (the `-e` of the last
|
|
121
114
|
`pip install` command), and then install the Python libraries needed to test it, lint it, and
|
|
122
115
|
generate its documentation.
|
|
123
116
|
|
|
124
|
-
If you plan to contribute back, you should install the pre-commit hooks:
|
|
117
|
+
If you plan to contribute back, you should install the prek (pre-commit) hooks:
|
|
125
118
|
|
|
126
119
|
```shell
|
|
127
|
-
|
|
120
|
+
prek install
|
|
128
121
|
```
|
|
129
122
|
|
|
130
123
|
This will ensure that your contribution passes our linting checks.
|
|
@@ -307,3 +300,5 @@ You must use your real name (sorry, no pseudonyms, and no anonymous contribution
|
|
|
307
300
|
- Submit the Issue.
|
|
308
301
|
- Submit a Pull Request and link it to the Issue by including "#<issue number>" in the Pull Request
|
|
309
302
|
summary.
|
|
303
|
+
|
|
304
|
+
Please read [CONTRIBUTING.md](./CONTRIBUTING.md) for more info.
|
|
@@ -28,6 +28,7 @@ PyStack has the following amazing features:
|
|
|
28
28
|
- 🧵 Shows if each thread currently holds the Python GIL, is waiting to acquire it, or is currently
|
|
29
29
|
dropping it.
|
|
30
30
|
- 🗑️ Shows if a thread is running a garbage collection cycle.
|
|
31
|
+
- 🪆 Reports on multiple interpreters in the same process.
|
|
31
32
|
- 🐍 Optionally shows native function calls, as well as Python ones. In this mode, PyStack prints
|
|
32
33
|
the native stack trace (C/C++/Rust function calls), except that the calls to Python callables are
|
|
33
34
|
replaced with frames showing the Python code being executed, instead of showing the internal C
|
|
@@ -84,18 +85,17 @@ cd pystack
|
|
|
84
85
|
python3 -m venv ../pystack-env/ # just an example, put this wherever you want
|
|
85
86
|
source ../pystack-env/bin/activate
|
|
86
87
|
python3 -m pip install --upgrade pip
|
|
87
|
-
python3 -m pip install -e .
|
|
88
|
-
python3 -m pip install -r requirements-test.txt -r requirements-extra.txt
|
|
88
|
+
python3 -m pip install -e . --group test --group extra
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
This will install PyStack in the virtual environment in development mode (the `-e` of the last
|
|
92
92
|
`pip install` command), and then install the Python libraries needed to test it, lint it, and
|
|
93
93
|
generate its documentation.
|
|
94
94
|
|
|
95
|
-
If you plan to contribute back, you should install the pre-commit hooks:
|
|
95
|
+
If you plan to contribute back, you should install the prek (pre-commit) hooks:
|
|
96
96
|
|
|
97
97
|
```shell
|
|
98
|
-
|
|
98
|
+
prek install
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
This will ensure that your contribution passes our linting checks.
|
|
@@ -278,3 +278,5 @@ You must use your real name (sorry, no pseudonyms, and no anonymous contribution
|
|
|
278
278
|
- Submit the Issue.
|
|
279
279
|
- Submit a Pull Request and link it to the Issue by including "#<issue number>" in the Pull Request
|
|
280
280
|
summary.
|
|
281
|
+
|
|
282
|
+
Please read [CONTRIBUTING.md](./CONTRIBUTING.md) for more info.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!.gitignore
|
|
@@ -1,19 +1,88 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
+
requires = ["scikit-build-core>=0.4", "nanobind>=1.8"]
|
|
3
|
+
build-backend = "scikit_build_core.build"
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
[project]
|
|
6
|
+
name = "pystack"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "Analysis of the stack of remote python processes"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = {text = "Apache-2.0"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Pablo Galindo Salgado"}
|
|
14
|
+
]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: Apache Software License",
|
|
18
|
+
"Operating System :: POSIX :: Linux",
|
|
19
|
+
"Programming Language :: Python :: 3.9",
|
|
20
|
+
"Programming Language :: Python :: 3.10",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
"Programming Language :: Python :: 3.12",
|
|
23
|
+
"Programming Language :: Python :: 3.13",
|
|
24
|
+
"Programming Language :: Python :: 3.14",
|
|
25
|
+
"Programming Language :: Python :: 3.15",
|
|
26
|
+
"Programming Language :: Python :: Implementation :: CPython",
|
|
27
|
+
"Topic :: Software Development :: Debuggers",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[dependency-groups]
|
|
31
|
+
docs = [
|
|
32
|
+
"recommonmark",
|
|
33
|
+
"sphinx",
|
|
34
|
+
"sphinx-autobuild",
|
|
35
|
+
"sphinx-argparse",
|
|
36
|
+
"furo",
|
|
37
|
+
]
|
|
38
|
+
extra = [
|
|
39
|
+
"mypy",
|
|
40
|
+
"bump2version",
|
|
41
|
+
"towncrier",
|
|
42
|
+
"prek",
|
|
43
|
+
{include-group = "docs"},
|
|
44
|
+
]
|
|
45
|
+
test = [
|
|
46
|
+
"coverage[toml]",
|
|
47
|
+
"pyinstaller",
|
|
48
|
+
"pytest",
|
|
49
|
+
"pytest-cov",
|
|
50
|
+
"pytest-xdist",
|
|
51
|
+
"setuptools",
|
|
8
52
|
]
|
|
9
53
|
|
|
10
|
-
|
|
54
|
+
[project.urls]
|
|
55
|
+
Homepage = "https://github.com/bloomberg/pystack"
|
|
56
|
+
|
|
57
|
+
[project.scripts]
|
|
58
|
+
pystack = "pystack.__main__:main"
|
|
59
|
+
|
|
60
|
+
[tool.scikit-build]
|
|
61
|
+
wheel.packages = ["src/pystack"]
|
|
62
|
+
wheel.install-dir = "pystack"
|
|
63
|
+
wheel.exclude = ["pystack/_pystack/**"]
|
|
64
|
+
metadata.version.provider = "scikit_build_core.metadata.regex"
|
|
65
|
+
metadata.version.input = "src/pystack/_version.py"
|
|
66
|
+
sdist.include = ["src/pystack/_version.py"]
|
|
67
|
+
sdist.exclude = [
|
|
68
|
+
".devcontainer/**",
|
|
69
|
+
".github/**",
|
|
70
|
+
".vscode/**",
|
|
71
|
+
"CONTRIBUTING.md",
|
|
72
|
+
"Dockerfile",
|
|
73
|
+
"docs/**",
|
|
74
|
+
"tests/**",
|
|
75
|
+
"uv.lock",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
[tool.scikit-build.cmake.define]
|
|
79
|
+
CMAKE_BUILD_TYPE = "Release"
|
|
11
80
|
|
|
12
81
|
[tool.ruff]
|
|
13
82
|
line-length = 95
|
|
14
|
-
select = ["F", "E", "W", "I001"]
|
|
83
|
+
lint.select = ["F", "E", "W", "I001"]
|
|
15
84
|
|
|
16
|
-
[tool.ruff.isort]
|
|
85
|
+
[tool.ruff.lint.isort]
|
|
17
86
|
force-single-line = true
|
|
18
87
|
known-first-party = ["pystack"]
|
|
19
88
|
known-third-party=["rich", "elftools", "pytest"]
|
|
@@ -43,7 +112,7 @@ type = [
|
|
|
43
112
|
underlines = "-~"
|
|
44
113
|
|
|
45
114
|
[tool.cibuildwheel]
|
|
46
|
-
build = ["
|
|
115
|
+
build = ["cp39-*", "cp310-*", "cp311-*", "cp312-*", "cp313-*", "cp314-*"]
|
|
47
116
|
manylinux-x86_64-image = "manylinux2014"
|
|
48
117
|
manylinux-i686-image = "manylinux2014"
|
|
49
118
|
musllinux-x86_64-image = "musllinux_1_2"
|
|
@@ -51,14 +120,15 @@ skip = "*-musllinux_aarch64"
|
|
|
51
120
|
|
|
52
121
|
[tool.cibuildwheel.linux]
|
|
53
122
|
before-all = [
|
|
54
|
-
"yum install -y libzstd-devel",
|
|
123
|
+
"yum install -y libzstd-devel cmake",
|
|
124
|
+
"yum install -y devtoolset-10-make || true", # Install a new enough GNU make on manylinux2014
|
|
55
125
|
"cd /",
|
|
56
|
-
"VERS=0.
|
|
126
|
+
"VERS=0.195",
|
|
57
127
|
"curl https://sourceware.org/elfutils/ftp/$VERS/elfutils-$VERS.tar.bz2 > ./elfutils.tar.bz2",
|
|
58
128
|
"tar -xf elfutils.tar.bz2",
|
|
59
129
|
"cd elfutils-$VERS",
|
|
60
130
|
"CFLAGS='-Wno-error -g -O3' CXXFLAGS='-Wno-error -g -O3' ./configure --disable-nls --enable-libdebuginfod=dummy --disable-debuginfod --with-zstd",
|
|
61
|
-
"make install
|
|
131
|
+
'PATH="/opt/rh/devtoolset-10/root/usr/bin/:$PATH" make install', # Ensure we pick up gnu make 4.x on manylinux2014
|
|
62
132
|
]
|
|
63
133
|
|
|
64
134
|
# Override the default linux before-all for musl linux
|
|
@@ -74,8 +144,8 @@ before-all = [
|
|
|
74
144
|
# set the FNM_EXTMATCH macro to get the build to succeed is seen here:
|
|
75
145
|
# https://git.alpinelinux.org/aports/tree/main/elfutils/musl-macros.patch
|
|
76
146
|
"cd /",
|
|
77
|
-
"apk add --update argp-standalone bison bsd-compat-headers bzip2-dev flex-dev libtool linux-headers musl-fts-dev musl-libintl musl-obstack-dev xz-dev zlib-dev zstd-dev",
|
|
78
|
-
"VERS=0.
|
|
147
|
+
"apk add --update argp-standalone bison bsd-compat-headers bzip2-dev flex-dev libtool linux-headers musl-fts-dev musl-libintl musl-obstack-dev xz-dev zlib-dev zstd-dev cmake",
|
|
148
|
+
"VERS=0.195",
|
|
79
149
|
"curl https://sourceware.org/elfutils/ftp/$VERS/elfutils-$VERS.tar.bz2 > ./elfutils.tar.bz2",
|
|
80
150
|
"tar -xf elfutils.tar.bz2",
|
|
81
151
|
"cd elfutils-$VERS",
|
|
@@ -88,16 +158,12 @@ before-all = [
|
|
|
88
158
|
]
|
|
89
159
|
|
|
90
160
|
[tool.coverage.run]
|
|
91
|
-
plugins = [
|
|
92
|
-
"Cython.Coverage",
|
|
93
|
-
]
|
|
94
161
|
source = [
|
|
95
162
|
"src/pystack",
|
|
96
163
|
]
|
|
97
164
|
branch = true
|
|
98
165
|
parallel = true
|
|
99
166
|
omit = [
|
|
100
|
-
"stringsource",
|
|
101
167
|
"tests/integration/*program*.py",
|
|
102
168
|
]
|
|
103
169
|
|