能否暂停已启动的Python脚本并查看变量值?
如何暂停运行中的Python脚本并查看变量值(无预先调试代码)
即使运行前没写调试逻辑,依然可以通过进程注入类的方法暂停脚本并查看变量,以下是几种可行方案:
方案1:用GDB触发PDB断点
- 先找到目标Python脚本的进程ID(PID):
ps aux | grep python # 或者用 pgrep python - 用GDB附加到该进程:
gdb -p <你的PID> - 在GDB命令行中执行以下代码,强制脚本触发PDB调试断点:
call PyRun_SimpleString("import pdb; pdb.set_trace()") - 此时脚本会暂停,你可以在PDB交互环境中直接输入命令查看变量,比如:
print 变量名 locals() # 查看当前局部变量 globals() # 查看全局变量 - 调试完成后,输入
c恢复脚本运行,输入q退出调试(会终止脚本)。
方案2:用pyrasite注入交互式Shell
- 适用于Linux系统,先安装pyrasite:
pip install pyrasite - 临时关闭系统的ptrace限制(否则可能无法注入):
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope - 注入交互式Python Shell到目标进程:
pyrasite <你的PID> - 进入Shell后,直接输入变量名即可查看值,也可以用
dir()遍历当前上下文的对象,调试完成后关闭Shell即可恢复脚本运行。
注意事项
- 以上操作都会暂停脚本运行,调试期间脚本不会继续执行任务
- 如果脚本是多线程/多进程模式,调试时要注意切换到目标线程(GDB中用
info threads查看,thread <线程ID>切换) - 部分环境需要root权限才能执行进程附加或注入操作
内容的提问来源于stack exchange,提问作者exch_cmmnt_memb
相关产品推荐
相关产品推荐

