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


热门话题
xml Java:如何忽略标记前缀   java Android Sqlite3列由命令行创建,但不是从我的Android代码创建的   java Picasso视图无法在DataAdapter内转换为上下文   java如何在jar文件中修改Android类而无需解包?   如何编辑已编译的Java字节码?   java如何在Android的ExpandableListView中保存子视图onGroupCollaped()中的数据   java Spring启动程序缓存速度缺失?   java相对于返回,Finally块何时运行   为继承层次结构建模。。。JAVA   java将值从内部递归方法传递到外部方法   根据作为参数传递的标志执行各种操作的java设计模式   java如何使用循环显示最大和最小的数字?   简化java if语句   java录制flv断开红色5   java如何在Android中添加图像以列出视图项?   java我如何获得Android中从广播组检查的最后一个单选按钮?   通过ResultSet反向检索数据时发生java NullPointerException   java可以处理Android。打包文件?   java如何构建JNI。动态链接库?   javascript当前请求不是多部分请求