用于查看运行python进程的stacktrace的实用程序
pytb的Python项目详细描述
用于检查运行进程的python堆栈的实用程序(仅限x64 linux)
特点:
- python3友好(pytb本身需要python2运行,但是进程 被分析的可以是Python3)
- greenlet(gevent)友好,可以显示每个greenlet的stacktrace
- 只需阅读/proc/<pid>/mem,因此不需要附加 目标进程(例如,如果您不想停止目标进程, 或者正在调试不可连接的进程,如d状态进程)
错误:
- 仅限Linux,仅限64位。
安装:
pip install pytb
用法:
sudo pytb [pid]
将显示每个python线程的stacktrace。
如果还想查看greenlet stacktraces,请使用
sudo pytb -g [pid]
这也将向您展示greenlets stacktraces。注:为了找到 所有greenlets pytb查找所有gc跟踪的对象,因此这可能需要 如果你有很多东西。
注:
支持查看python2和python3的回溯(它会尝试猜测, 不管是2还是3,但是您可以通过指定-2或-3来帮助它 选项)
该实用程序通过读取/proc/<pid>/mem(这就是sudo是 需要)。它使用nm和objdump来查找内部python结构 在记忆中。
python进程也可能是用不同的标志编译的 影响内部python的结构字段对齐 pytb严重依赖于 -dpython-executable选项,其中python-executable是 包含所属进程的调试符号的可执行文件 感兴趣的。pytb在这种情况下将启动gdb并请求它 它感兴趣的字段的偏移量。
还有一个问题是frame->f_code->co_filename不包含 绝对路径,但相对路径 在某些地方,这些相对路径将变得无效(当 渲染堆栈跟踪)。对于这种情况,有--scriptdir dir 参数,默认为/proc/<pid>/cwd,用作 co_filename。