Method to peek at a Python program running right now
是否可以在不中断的情况下找到有关当前运行的python程序正在做什么的任何信息?
另外,如果不可能的话,有没有可能让正在运行的python程序崩溃,这样我至少可以得到stacktrace(在Ubuntu上使用pydev)?
我知道我应该使用日志或者在调试模式下运行它,或者插入一条语句来运行调试程序…
相关问题
- 从正在运行的python程序获取堆栈跟踪——非常相似,但更一般的是,这个问题是为了调试正在运行的python程序。
如果你放置
1 2 | import code code.interact(local=locals()) |
在脚本的任何一点上,Python都将在该点上实例化一个python shell,该shell在该点上可以访问脚本状态下的所有内容。^ d退出shell并在该点之后继续执行。
甚至可以从shell、调用函数等修改该点的状态。
如果您有一个运行中的python,它不是用任何类型的跟踪或日志机制构建的,并且您希望看到它在内部做什么,那么有两个选项:
在Solaris或Mac上,如果使用系统提供的python,则使用dtrace
使用gdb附加到正在运行的python进程,
要使具有stacktrace的python程序"崩溃",您可以发送sigint,即除非您捕获它或捕获keyboardinterrupt(默认情况下,python安装一个sigint处理程序,它会引发keyboardinterrupt)。
至于调试,Pydev是否有内置的调试支持(通过PDB)?
就个人而言,我更喜欢IPDB。这是PDB加上了IPython的优点。它看起来更像是一个交互式的Python解释器,有一些调试函数的快捷方式。
您可以使用lptrace。它就像用于Python程序的
如果您对崩溃感到满意,插入"1/0"将创建一个快速而脏的断点,并具有完整的回溯!
安装信号处理程序,该处理程序使用