我正在使用gevent
及其Backdoor
功能。在
这是我的代码的简化版本:
from gevent import backdoor, event
class App(object):
def __init__(self):
self.stop_event = event.Event()
self.servers = []
self.servers.append(backdoor.BackdoorServer((localhost, 6666))
# There is a tcp stream server using gevent configured too
def start(self):
for server in self.servers:
if not server.started:
server.start()
self.stop_event.wait()
for server in self.servers:
if server.started:
server.stop()
def run(*args, **kw):
app = App()
app.start()
在我的run
中,从entry_points
创建的run
方法被调用
我想用我的后门来检查app
函数中的app
变量local。在
我连接到后门,并运行命令inspect.stack()
。我得到的是:
如您所见,gevent似乎正在重写堆栈。启动程序的模块中的run
函数不在其中。它在执行后门的greenlet的run方法处停止。在
是否有任何方法可以访问已启动程序的正在运行的run
方法来检查它并访问其本地app
变量?在
好吧,我找到了解决办法。
greenlet
对象有一个parent
属性,用于查找哪个属性生成了您当前正在查看的对象。然后greenlet有一个属性gr_frame
来存储stacktrace。在因此,在我的情况下,一旦我连接到后门服务器,它将是这样的:
我无法访问正在运行的函数
run
中的本地对象app
,以检查其其他属性的值并调试我的实时gevent应用程序。在相关问题 更多 >
编程相关推荐