用于调试运行进程的zc.monitor插件
zc.monitorpdb的Python项目详细描述
montorpdb是(非常)轻量级zc.monitor的一个小插件 系统。它允许用户远程登录到监视器端口并调用 python调试器(pdb)提示。
要使用它,首先必须注册命令,这样zc.monitor就会知道 它。
>>> import zc.monitorpdb >>> import zope.component >>> import zc.monitor.interfaces >>> zope.component.provideUtility(zc.monitorpdb.command, ... zc.monitor.interfaces.IMonitorPlugin, 'pdb')
由于zc.monitor是用zc.ngi实现的,我们可以使用zc.ngi的测试 帮手。
>>> import zc.ngi.testing >>> connection = zc.ngi.testing.TextConnection() >>> server = zc.monitor.Server(connection)
如果调用该命令,我们将得到适当的提示。
>>> connection.test_input('pdb\n') (Pdb)
现在我们可以做一些常规的pdb操作,比如列出正在执行的代码。
>>> connection.test_input('l\n') 34 global fakeout 35 36 fakeout = FakeStdout(connection.connection) 37 debugger = pdb.Pdb(stdin=None, stdout=fakeout) 38 debugger.reset() 39 -> debugger.setup(sys._getframe(), None) 40 41 42 def command(connection, *args): 43 global debugger 44 global fakeout (Pdb)
以及在函数调用堆栈中“向上”。
>>> connection.test_input('u\n') > /graphted-storage/workspace/zc.monitorpdb/src/zc/monitorpdb/__init__.py(48)command() -> reset(connection) (Pdb)
有一个“reset”命令为我们提供了一个新的调试器(以防万一 我们的系统出了问题,我们不想重启主机 过程)。我们从现在的位置出发 上一个“u”命令的结果)到另一个。
>>> connection.test_input('l\n') 57 return zc.monitor.QUIT_MARKER 58 else: 59 debugger.onecmd(' '.join(args)) 60 61 connection.write(debugger.prompt) 62 -> return zc.monitor.MORE_MARKER [EOF] (Pdb) >>> connection.test_input('reset\n') (Pdb) >>> connection.test_input('l\n') 34 global fakeout 35 36 fakeout = FakeStdout(connection.connection) 37 debugger = pdb.Pdb(stdin=None, stdout=fakeout) 38 debugger.reset() 39 -> debugger.setup(sys._getframe(), None) 40 41 42 def command(connection, *args): 43 global debugger 44 global fakeout (Pdb)
但是,有些功能不起作用。
>>> connection.test_input('debug 1+1\n') the "debug" command is not supported (Pdb)
一旦我们完成了,我们要求被释放。
>>> connection.test_input('quit\n') -> CLOSE