(gdb) py-bt 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用 cont 命令, 然后使用 Ctrl+C 来暂停,并且打印出调用...
其中py-bt就是用来查看Python堆栈的: (gdb) py-bt 线程查看 调试多线程程序,首先总得搞清楚到底有哪些线程吧: (gdb) info threads Id Target Id Frame 37 Thread 0xa29feb40 (LWP 17914)"NotificationThr"0xb7fdd424in__kernel_vsyscall () 36 Thread 0xa03fcb40 (LWP 17913)"python2.7"0xb7fdd424in__...
(gdb) run <programname>.py <arguments> 1. 2. 3. 自动: $ gdb -ex r --args python <programname>.py <arguments> 1. 这样的话,它会一直运行直到退出、段错误、或者人为的停止(使用 Ctrl+C)。 如果进程已经开始运行,你可以通过 PID 来接入它: gdb python <pid of running process> 调试进程 如果...
#4 0x0000000000485fc2 in PyEval_EvalFrame (f=0x66ccd8) at ../Python/ceval.c:2163 ... 1. 2. 3. 4. 5. 6. 7. 那么,怎么查看Python堆栈呢。安装python-gdb之后,gdb会提供若干相关的操作。其中py-bt就是用来查看Python堆栈的: (gdb) py-bt 1. 线程查看 调试多线程程序,首先总得搞清楚到底有...
(gdb) py-bt 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用cont命令, 然后使用Ctrl+C来暂停,并且打印出调用栈。
# strace结果 futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0 # py-bt-full 结果 #4 Frame 0x7fc544001090, for file /root/anaconda/lib/python2.7/threading.py, line 339, in wait (self=<_Condition(_Condition__lock=<_RLock(_Verbose__verbose=False, _RLock__owner=None, _RLock...
(gdb) py-bt 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用cont命令, 然后使用Ctrl+C来暂停,并且打印出调用栈。
getting a python stack trace If you have Python extensions installed, you can enter: (gdb) py-bt togetstack trace with familiar Python source code. Working With Hung Processes If a process appears hung, it will either be waiting on something (alock, IO, etc), or beina busy loop somewher...
(gdb) py-bt可以获取熟悉的 Python 源代码。对挂住的进程开刀如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。如果进程在疯狂循环,你可以先让它运行一会,使用 cont 命令, 然后使用 Ctrl+C 来暂停,并且打印出调用栈。
(gdb) py-bt 可以获取熟悉的 Python 源代码。 对挂住的进程开刀 如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。 也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。 如果进程在疯狂循环,你可以先让它运行一会,使用cont命令, 然后使用Ctrl+C来暂停,并且打印出调用栈。