另一个堆栈/会话转储程序实用程序
项目描述
另一个堆栈/会话转储程序实用程序
一个“简单”的库,可帮助在没有附加调试器的情况下进行事后分析。
用法
转储进程状态
您可以使用yasdu.dump()转储进程状态。当心:
- 像这样的转储可能包含敏感数据,如密码、身份验证令牌等。 请谨慎分享。
yasdu.dump不会覆盖文件并将创建filename.number文件。
import yasdu
yasdu.dump('dump.json', 'Comment here')
# *** Created stack dump in 'dump.json' ***
# => 'dump.json'
# 'dump.json' is actual filename the dump was saved in
yasdu.dump('dump.json', 'Comment here')
# *** Created stack dump in 'dump.json.1' ***
# => 'dump.json.1'
# Since 'dump.json' already exists, the library picked 'dump.json.1'
挂钩异常。
该yasdu.hook()函数将钩子sys.excepthook,如果有一个未捕获的异常杀死程序,它会将进程状态转储到yasdu_autodump_[ISODATETIME].json
查看钩子和崩溃示例
加载转储
命令行工具
对于 CLI,建议使用 IPython,但不是必需的。
usage: yasdu [-h] -l FILE [-S] [-y]
optional arguments:
-l FILE, --load FILE Loads given file and starts a Python interpreter
-S, --no-sources Disables reading the sources from disk and showing them, useful if they have changed.
-y Assume yes to all questions
-h, --help show this help message and exit
例子:
$ python examples/hook_and_crash.py
*** Created stack dump in 'yasdu_autodump.json' ***
Traceback (most recent call last):
File "examples/hook_and_crash.py", line 13, in <module>
happily_convert_some_values()
File "examples/hook_and_crash.py", line 8, in happily_convert_some_values
v2 = int('deadbeef') # oh noes
ValueError: invalid literal for int() with base 10: 'deadbeef'
让我们检查一下自动转储。
$ yasdu -l yasdu_autodump.json
Loading dump files can allow them to execute code. Do you still want to proceed? [y/N]y
Unpickled 9 objects...
Done loading data.
# exception traceback generated by the program ↓
This is an automatic dump it has been triggered by an exception:
Traceback (most recent call last):
File "examples/hook_and_crash.py", line 13, in <module>
happily_convert_some_values()
File "examples/hook_and_crash.py", line 8, in happily_convert_some_values
v2 = int('deadbeef') # oh noes
ValueError: invalid literal for int() with base 10: 'deadbeef'
# stack data saved in the dump and sources loaded from disk
Available frames
0. examples/hook_and_crash.py:13 happily_convert_some_values() <-- # we're here
1. examples/hook_and_crash.py:8 v2 = int('deadbeef') # oh noes
LoadedFrame object is available through the `_lframe` global variable
Using IPython for shell...
# [snip]
[hook_and_crash.py:13 (0)] In [1]: sources()
import yasdu
some_global_variable = 'testing123'
def happily_convert_some_values():
v1 = int('deadbeef', 16)
v2 = int('deadbeef') # oh noes
if __name__ == '__main__':
yasdu.hook()
-> happily_convert_some_values()
[hook_and_crash.py:13 (0)] In [2]: down()
Available frames
0. examples/hook_and_crash.py:13 happily_convert_some_values()
1. examples/hook_and_crash.py:8 v2 = int('deadbeef') # oh noes <--
[hook_and_crash.py:13 (0)] In [3]: sources()
import yasdu
some_global_variable = 'testing123'
def happily_convert_some_values():
v1 = int('deadbeef', 16)
-> v2 = int('deadbeef') # oh noes
if __name__ == '__main__':
yasdu.hook()
happily_convert_some_values()
# variables are loaded from the dump
[hook_and_crash.py:13 (0)] In [4]: v1
Out[4]: 3735928559
[hook_and_crash.py:13 (0)] In [5]: some_global_variable
Out[5]: 'testing123'
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
yasdu-1.0.0.tar.gz
(8.9 kB
查看哈希)
内置分布
yasdu-1.0.0-py3-none-any.whl
(9.5 kB
查看哈希)