运行时检测调用堆栈 python_显示从正在运行的Python应用程序的堆栈跟踪

我有我的模块使用这样的情况 - 在一个进程中运行很长一段时间,但有时卡住了未知和不可复制的原因。它有点哈克,并且仅适用于UNIX(要求信号): p>

要使用,只需调用在某些点上听()函数,当你的程序启动(你甚至可以把它贴在site.py将所有Python程序中使用它),并让它运行。在任何时候,发送过程中的SIGUSR1信号,使用kill或蟒蛇: P>

这将导致程序以它目前在该点突破到Python控制台,显示你的堆栈跟踪,并让你操控的变量。使用Control-D(EOF)继续运行(但请注意,你可能会中断任何I / O等你的信号点,所以它不是完全是非侵入性的。 P>

我有另外一个脚本,做同样的事情,但它通过管道运行的进程通信(允许调试后台运行的进程等)。它有点大,张贴在这里,但我已经添加了其作为蟒蛇菜谱食谱。 P>

要安装一个信号处理程序的建议是一个很好的,我用了很多。例如,BZR通过默认情况下安装一个SIGQUIT处理程序调用 立即放弃你到一个PDB提示。 (请参阅bzrlib.breakin模块的源的具体细节。)使用PDB,你不仅可以获取当前栈跟踪,也检查变量等。 P>

不过,有时我需要调试,我没有必须安装在信号处理先见之明的过程。在Linux上,你可以gdb连接到过程,并得到一个蟒蛇堆栈跟踪一些GDB宏。把http://svn.python.org/projects/python/trunk/Misc/gdbinit在,则: P>

  • 附加GDB: 的 em>的 LI>
  • 下载的是Python堆栈跟踪: li> ul>

    这不是完全可靠的不幸,但它工作的大部分时间。 P>

    最后,连接 往往可以给你一个好主意,什么过程正在做什么。 P>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值