Python 代码调试工具 pylane 如何使用?
赶在回家前发个帖,推荐下我们组的 python 代码 debug 工具,希望赚波 star。
项目在这里 pylane
简单原理是:通过 gdb trace python 进程,然后在该进程的 python vm 中动态地注入一段 python 代码, 从而对一个运行中的 python 进程执行一段任意的逻辑。
这个是我们组日常线上 debug 工具的一部分核心代码,跟用 ipython 一样简单直观。
求各位大佬轻拍
Python 代码调试工具 pylane 如何使用?
这里也有一篇我们日常 debug 的经验总结 https://mp.weixin.qq.com/s/Mlhrp2E390EMD0ZfSaNFKw
pylane 是一个用于 Python 的交互式进程内调试和诊断工具,它允许你像使用 IPython 一样,在运行时注入代码到一个正在运行的 Python 进程中。这比传统的 pdb 调试在某些场景下更灵活。
核心使用方法如下:
-
安装:
pip install pylane -
启动你的目标 Python 程序。假设你的脚本是
my_script.py。python my_script.py记下它的进程 ID (PID)。你可以用
ps aux | grep my_script.py或pgrep -f my_script.py来查找。 -
在另一个终端中,使用 pylane 连接到该进程。
python -m pylane <PID>例如,如果 PID 是 12345,就运行
python -m pylane 12345。 -
进入交互式调试环境。连接成功后,你会看到一个类似 IPython 的提示符。在这里,你可以执行任何 Python 代码,并且这些代码将在目标进程的上下文和命名空间中运行。这意味着你可以直接访问和修改目标程序中的变量、函数和对象。
一个简单的代码示例演示其威力:
假设 my_script.py 内容如下:
# my_script.py
import time
counter = 0
def some_work():
global counter
while True:
counter += 1
print(f"Working... count: {counter}")
time.sleep(5)
if __name__ == "__main__":
some_work()
运行它:python my_script.py。假设其 PID 为 12345。
在另一个终端连接:python -m pylane 12345。
在 pylane 的交互提示符中,你可以进行如下操作:
# 查看目标进程中已有的变量
In [1]: counter
Out[1]: 17 # 可能已经是某个值了
# 直接修改变量
In [2]: counter = 100
# 调用目标进程中的函数 (注意:这里会阻塞,因为 some_work 是死循环)
# 更常见的做法是检查状态或修改配置变量
# 导入模块并执行更复杂的诊断
In [3]: import threading
In [4]: for thread in threading.enumerate():
...: print(thread.name, thread.is_alive())
关键点:
- 侵入性:你的代码会直接影响目标进程,操作错误可能导致程序崩溃。
- 适用场景:非常适合诊断线上问题、分析内存状态、动态修改配置,或者当程序卡住时查看内部状态,而无需重启或预先添加大量调试日志。
- 与 pdb 的区别:pdb 需要你在代码中预先设置断点或通过信号触发,是“计划内”的调试。pylane 是“无侵入”的,可以随时附加到任何正在运行的 Python 进程进行“外科手术式”检查。
一句话总结:把它当作一个能直接“附体”到运行中进程的超级版 IPython 来用就行。
前排收藏
伪前排收藏
学习下
对,看起来确实很像,不过 py3、自动补全等我们做的还是要稍微好些。更重要的是。。还在持续维护。。
收藏了
大佬们吊。
好像挺牛逼的
收藏一哈
可以,微信那个文章写的很好,这个工具也很好用的样子,已经 star 了。
哇,正好需要,谢谢
牛批啊。 马客住。
八客气,有用就好~
注入这个功能不错,收藏+1
线上这样 debug,感觉怪怪的。。。
emmm,并不罕见呀,保留事发现场

