用于调试运行进程的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误