想要追踪一个正在运行的 Python 进程里面的函数调用及代码执行情况

2020-12-18 11:16:34 +08:00
 fuckyoudolphin

需求有点像精准测试 但没办法在 build 的时候插桩

想追踪这个已经运行起来的进程 某段时间的代码运行情况,执行了哪些行 哪些方法

求教 有什么好的办法吗

2408 次点击
所在节点    Python
9 条回复
ysc3839
2020-12-18 12:01:23 +08:00
方法不知道,我只知道 Visual Studio 可以直接调试一个外部的 Python 进程。
charexcalibur
2020-12-18 12:04:33 +08:00
caiji11
2020-12-18 13:08:29 +08:00
VizTracer 试试这个
zhangkunkyle
2020-12-18 13:17:50 +08:00
pysnooper
fuckyoudolphin
2020-12-18 14:41:39 +08:00
@charexcalibur 谢谢,但是这个 pyspy 貌似是对帧取样 实现不了对执行的每一行代码的监控
jones2000
2020-12-18 18:10:16 +08:00
代码打桩, 一般用来做测试代码覆盖率用的。 给一个测试版编译的时候在所有的分支都打上桩 跑完所有的测试, 统计触发了多少桩。应该是在生成 AST 的时候加桩的, 然后再跑。解释性的语言你可以先生成 AST 的时候加桩,然后再把加桩以后的 AST 转成 py. 再跑
lc1450
2020-12-18 18:35:04 +08:00
最近也遇到类似问题,定时任务卡了好几天,正常情况应该几小时就完成
strace -p 能看到卡在 futex 系统调用, 但具体卡在 python 代码什么地方看不到, 这种场景用什么工具来看?
alvie
2020-12-18 18:48:52 +08:00
todd7zhang
2020-12-21 14:59:04 +08:00
注册 signal ? 接受信号,然后 sys._current_frames().items()拿到 stack, 再 traceback.extract_stack(stack) 拿到
filename, lineno, name, line

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX