是否有可能在不中断的情况下找到有关现在正在运行的 正在运行的Python程序的信息?
另外,如果不可能的话,是否还有崩溃正在运行的Python程序,这样我至少可以获得一个堆栈跟踪(在Ubuntu上使用PyDev)?
我知道我应该使用日志或在调试模式下运行它或插入一个语句来运行调试器......
相关问题
答案 0 :(得分:26)
如果你放置
import code
code.interact(local=locals())
在你的脚本中的任何一点,python都会在那个点上实例化一个python shell,它可以访问那时脚本状态中的所有内容。 ^ D退出shell并继续执行该点。
您甚至可以从shell,调用函数等修改此时的状态。
答案 1 :(得分:8)
如果您有一个正在运行的Python,它没有使用任何类型的跟踪或日志记录机制构建,并且您想要查看它在内部执行的操作,那么有两个选项:
在Solaris或Mac上,如果您使用的是系统提供的Python,则使用dtrace
答案 2 :(得分:4)
使用堆栈跟踪“崩溃”一个python程序你可以发送它SIGINT,除非你捕获它或捕获KeyboardInterrupt(python默认安装一个SIGINT处理程序,引发KeyboardInterrupt)。
至于调试,PyDev是否有内置的调试支持(通过pdb)?
答案 3 :(得分:2)
答案 4 :(得分:0)
安装信号处理程序,用sys.settrace()
设置跟踪函数,打印回溯并清除清除跟踪功能。这样您就可以随时查看程序的位置而不会中断它。注意,在每个sys.getcheckinterval()
python指令之后处理该信号。
答案 5 :(得分:0)
如果您对崩溃感到满意,插入“1/0”将创建一个快速且脏的断点,并带有完整的回溯!
答案 6 :(得分:0)
您可以使用lptrace。对于Python程序来说就像strace
- 它允许您附加到正在运行的Python进程并打印它所做的每个函数调用。